从C中的文件创建链接列表时内存访问冲突

时间:2013-10-06 04:18:14

标签: c list hyperlink

您好我在使用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);                 
}

}

1 个答案:

答案 0 :(得分:0)

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

gdb ./YourProgram

在gdb中:     运行

当你遇到段错误时,只需输入

即可
backtrace

然后你得到一个堆栈转储,指出坏事发生的地方。

我的第一个猜测就是那个

temp->next = node;

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