开发者

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;
       ...
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜