您好我在使用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);
}
}
答案 0 :(得分:0)
当您获得访问冲突时,找出问题的最简单方法是启动调试器。在Linux上,这将是gdb。
gdb ./YourProgram
在gdb中: 运行
当你遇到段错误时,只需输入
即可backtrace
然后你得到一个堆栈转储,指出坏事发生的地方。
我的第一个猜测就是那个
temp->next = node;
导致访问冲突,但我不确定,因为我不知道你何时设置list_head。