gpt4 book ai didi

c - 如何查找段错误的错误

转载 作者:行者123 更新时间:2023-11-30 20:04:33 26 4
gpt4 key购买 nike

我有一小段代码,编译得很好。但运行时出现段错误。

#include <stdlib.h>
#include <string.h>

typedef struct ListElmt_ // Define a structure for linked list elements.
{
void *data;
struct ListElmt_ *next;
} ListElmt;


typedef struct List_ //define a structure for linked lists.
{
int size; // the size of the linked list

ListElmt *head; // the head element
ListElmt *tail; // the tail elemtent

} List;

void list_init(List *l)
{
l->size = 0;
l->head = NULL;
l->tail = NULL;
}

int main()
{
List *ls = NULL;
list_init(ls);

return 0;

}

我已经尝试过,但无法找出问题所在。请帮忙?我是新手,有人可以建议我找到此类错误的工具吗?

最佳答案

您的失败行是:

 l->size = 0;

由于您将 ls 初始化为 NULL,所以上面的行正在执行 NULL->size,即非法取消引用。您需要先为ls分配内存。

但是,没有理由动态分配List。只需执行以下操作:

int main()
{
List ls; // Don't make list a pointer - just an ordinary var
list_init(&ls); // Pass the address of ls (i.e. &ls) as the function
// expects a pointer.

return 0;
}

要找到指针版本遇到的问题类型,您可以使用调试器并使用单步,即逐行执行代码,直到遇到故障点。另一种方法是插入许多 printf 语句,以便您可以看到代码在崩溃之前做了什么。

关于c - 如何查找段错误的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39564842/

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