【问题标题】:Getting segmentation fault when trying to load a file in C尝试在 C 中加载文件时出现分段错误
【发布时间】: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,因为它的工作原理与列表相同。

【问题讨论】:

标签: c file segmentation-fault


【解决方案1】:

malloc() 不初始化内存。 list 的初始值是垃圾。

另外,请检查您对strtok 的电话; delim 参数看起来很可疑。我无法想象它是如何导致崩溃的,但如果你不修复它会很麻烦。

【讨论】:

    猜你喜欢
    • 2014-07-28
    • 2018-06-27
    • 2017-04-15
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 2012-07-01
    • 2012-04-04
    • 2022-01-23
    相关资源
    最近更新 更多