【发布时间】:2017-10-05 20:50:27
【问题描述】:
我无法弄清楚为什么会出现分段错误错误。非常感谢任何帮助!
AddressBookList * commandLoad(char * fileName)
{
AddressBookList * list;
AddressBookNode * node;
char line[MAX_LINE_LENGTH];
char *ptr;
int id;
char *name;
FILE * fp = fopen(fileName, "r");
printf(">Opening the file %s.\n", fileName);
if(fp == NULL){
printf(">Error: Unable to find the specified file. ");
fclose(fp);
return NULL;
}
else{
printf(">Loading the file ...\n");
list = createAddressBookList();
while(fgets(line,MAX_LINE_LENGTH,fp) != NULL){
if(line[0]!= '#'){
id = (int)strtol(strtok(line,", "), &ptr, 0);
name = strtok(NULL,",\n");
node = createAddressBookNode(id,name);
if(list->size == 0){
list->head = node;
list->current = list->head;
node->nextNode = NULL;
node->previousNode = NULL;
}
else{
node->previousNode = list->tail;
node->previousNode->nextNode = node;
}
list->tail = node;
list->size++;
printf("%d,%s\n",node->id,node->name);
}
}
printf(">%d phone book entries have been loaded from the file.\n",list->size);
printf(">Closing the file.\n");
}
fclose(fp);
return list;
}
AddressBookList * createAddressBookList()
{
AddressBookList * list = malloc(sizeof(AddressBookList));
return list;
}
我将 argv 从 main 传递给 commandLoad 并尝试在此函数中加载文件。下面是函数以及 createAddressBookList 的函数,以防我在那里也遗漏了一些东西。未包含函数 createAddressBookNode,因为它的工作原理与列表相同。
【问题讨论】:
-
1.使用调试器。 2. 提供minimal reproducible example。
标签: c file segmentation-fault