Node *addToTree(Node *head, Node *newNode) {
if (head == NULL) {
head = newNode;
} else {
if (newNode->price < head->price) {
head->left = addToTree(head->left, newNode);
} else
if (newNode->price > head->price) {
head->right = addToTree(head->right, newNode);
} else
if (newNode->price == head->price) {
free(newNode);
}
}
return head;
}
Node *getCars(char *name) {
FILE *fp;
if ((fp = fopen(name, "r")) == NULL) {
return NULL;
} else {
Node *head = NULL;
Node *tmp;
char delim[2] = "|";
char car[MAXLINELENGTH] = {0};
char *token = NULL;
int ch;
while (!feof(fp)) {
tmp = malloc(sizeof(Node));
tmp->left = tmp->right = NULL;
fgets(car, MAXLINELENGTH, fp);
token = strtok(car, delim);
while (token != NULL) {
if (strcmp(token, "model") == 0) {
token = strtok(NULL, delim);
strcpy(tmp->model, token);
} else
if (strcmp(token, "make") == 0) {
token = strtok(NULL, delim);
strcpy(tmp->make, token);
} else
if (strcmp(token, "price") == 0) {
token = strtok(NULL, delim);
tmp->price = atoi(token);
} else
if (strcmp(token, "year") == 0) {
token = strtok(NULL, delim);
tmp->year = atoi(token);
} else
if (strcmp(token, "color") == 0) {
token = strtok(NULL, delim);
strcpy(tmp->color, token);
} else
if (strcmp(token, "type") == 0) {
token = strtok(NULL, delim);
if (token == NULL) {
break;
}
strcpy(tmp->type, token);
} else
if (strcmp(token, "mileage") == 0) {
token = strtok(NULL, delim);
tmp->mileage = atoi(token);
}
token = strtok(NULL, delim);
}
if (check("makes.txt", tmp->make) != 1) {
continue;
} else
if (check("colors.txt", tmp->color) != 1) {
continue;
} else
if (check("types.txt", tmp->type) != 1) {
continue;
} else {
head = addToTree(head, tmp);
}
}
free(tmp);
fclose(fp);
return head;
}
}
所以对于一个家庭作业,我应该通过输入文件与汽车10000左右的信息是,型号解析,颜色,型号,价格,行驶里程和年并根据它们的价格将它们输入到BST中,当我运行代码时,它说我在malloc的tmp指针处有274个字节丢失。我只是想知道这是什么解决方案,而且我真的可以解析任何建议/帮助因为我的getCars功能是丑陋的,它也需要大约15秒的时间运行,任何帮助,非常感谢!泄漏的内存,同时创造BST,解析需要援助
变化'而{'来'而(与fgets(汽车,MAXLINELENGTH,FP)){'删除'免费(FEOF(FP)!) (tmp);' – BLUEPIXY
@BLUEPIXY你会不会也知道为什么在valgrind中获得“有条件的跳转取决于未初始化的值”错误?或者你会看到更多的代码? –
'continue;' - >'free(tmp);继续;' – BLUEPIXY