gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:48:22 25 4
gpt4 key购买 nike

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

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

{

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);
}

}

最佳答案

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

gdb ./YourProgram

在 gdb 中: 运行

当出现段错误时,只需键入

backtrace

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

我的第一个猜测是

temp->next = node;

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

关于c - 从 C 中的文件创建链接列表时发生内存访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19205368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com