Reading string from a text file to build a binary search tree
Here is my code so far
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#define lineSize 256
struct recordNode {
char district[256];
int employees;
int employers;
int students;
int retried;
int others;
struct recordNode* left;
struct recordNode* right;
};
struct stockNode* addRecord(struct recordNode* tree, struct recordNode node) {
struct recordNode* newnode;
struct recordNode* searcher;
/* allocate memory block and assign parameter values to it */
newnode = (struct recordNode*)malloc(sizeof(struct recordNode));
newnode->left = NULL;
newnode->right = NULL;
/* check if the tree is empty, and in such case, return the newnode as*/
/* the first node of the tree */
if (tree == NULL)
return newnode;
/* searcher is the pointer to search for the correct location for insertion */
searcher = tree;
while (1) {
/* see if the newnode should go to left branch */
//if (code < searcher->code) {
if (strcmp(tree->district, node.district) < 0) {
/* yes, and if the left branch is empty, this is the insertion location */
if (searcher->left == NULL) {
searcher->left = newnode;
return tree;
}
else { /* not yet, keep moving to the next level down */
searcher = searcher->left;
continue;
}
}
/* see if the newnode should go to right branch */
if (strcmp(tree->district, node.district) > 0) {
/* yes, and if the right branch is empty, this is the insertion location */
if (searcher->right == NULL) {
searcher->right = newnode;
return tree;
}
else { /* not yet, keep moving to the next level down */
searcher = searcher->right;
continue;
}
}
else {
free(newnode);
return NULL; /* an error indication */
}
}
}
void getFile () {
struct recordNode node;
struct recordNode *tree;
FIL开发者_运维技巧E* fpin;
FILE* fpout;
char line_buffer[lineSize]; /* BUFSIZ is defined if you include stdio.h */
int counter = 0;
//file validation
fpin=fopen("testData.txt", "r");
if (fpin == NULL ) exit(0);
counter = 0;
while (fgets(line_buffer, sizeof(line_buffer), fpin)) {
counter++;
if (counter != 1) {
sscanf(line_buffer, "%[^','],%d,%d,%d,%d", node.district, &node.employees, &node.students, &node.retried, &node.others);
tree = addRecord(tree, node); **//ERROR**
}
}
getchar();
}
void main() {
getFile();
getchar();
}
The following line:
tree = addRecord(tree, node);
Gives this error:
//ERROR Project Project2.exe raised exception class EAccessViolation with message 'Access violation at address 32657E39. Read of address 00000001'. Process stopped. Use Step or Run to continue
How can I fix this issue?
Make sure to assign *tree pointer to NULL when you first create it. Otherwise it can be any value.
void getFile () {
struct recordNode node;
struct recordNode *tree=NULL;
...
精彩评论