-1

您好,我在使用 C 中加载结构链接列表时遇到了一些问题,该列表包含在程序最初运行后创建的文件的内容。我已经为此工作了几天,似乎不明白我做错了什么,因为我相信这应该有效。我不断收到内存访问冲突,我假设这要么来自我使用节点填充结构的方式,要么我没有在程序退出时释放内存。这是一个家庭作业,我知道你们对这些类型的问题不屑一顾,所以请随意不要回答,并认为我是个白痴。我不是在寻找答案,但我显然不理解某些东西。

最后一件事是我的文件关闭被评论的原因是,当它处于活动状态时,我看不到我的程序打印到控制台的内容。没有它,我可以看到文件的输出,直到它到达文件中新创建的链接列表的末尾。

{

FILE* filename;                                 //create FILE pointer               
struct PlayerTime *node, *temp;                 //create a PlayerTime struct pointer node
char sname[MAX_STR_LEN];                        //specifies type of data to be stored
float stime;                                    //specifies type of data to be stored
filename = fopen("SAVE_TIMES.txt", "rb");       //sets saveTimes pointer = to an open file

if(filename != NULL)                                //if file is there
{   
    while((fread(sname, MAX_STR_LEN, 1, filename)) == 1)        
    {           
        node = (struct PlayerTime *) malloc(sizeof(struct PlayerTime));     //create a node

        strcpy(node->name, sname);                                          //copies name data from file into node
        fread(&stime, sizeof(float), 1, filename);                          //reads time and passed by reference
        node->seconds = stime;                                              //copies seconds data from file into node

         if(list_head != NULL)                                              //loop reads PlayerTime lis_head
        {
            temp->next = node;                                              //loop fills struct with saved times
        }
        else
            list_head = node;
        temp = node;
    }   
    //fclose(filename);                 
}

}

4

1 回答 1

0

当您遇到访问冲突时,找出问题所在的最简单方法是启动调试器。在 Linux 上,这将是 gdb。

gdb ./YourProgram

在 gdb 中:运行

当您遇到段错误时,只需键入

backtrace

你会得到一个堆栈转储,指出坏事发生在哪里。

我的第一个猜测是

temp->next = node;

导致访问冲突,但我不确定,因为我不知道您何时设置 list_head。

于 2013-10-06T04:27:35.380 回答