-1
這裏是我到目前爲止的代碼讀取字符串建立一個二叉搜索樹
#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;
FILE* 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();
}
以下行:
tree = addRecord(tree, node);
給出了這樣的錯誤:
//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
我該如何解決這個問題?
你遇到什麼錯誤?你有什麼嘗試去調試這個問題? – 2011-06-08 05:22:24
Project Project2.exe引發異常類EAccessViolation,消息'地址32657E39處出現訪問衝突。讀取地址00000001'。進程停止。使用Step或Run繼續(borland C++) – hkvega 2011-06-08 05:25:45