gpt4 book ai didi

c - 创建链接列表时出现神秘的段错误(添加功能)

转载 作者:太空宇宙 更新时间:2023-11-04 05:43:53 24 4
gpt4 key购买 nike

我试图在 C 中创建一个链表,但程序由于一些神秘的错误而崩溃了。

首先我尝试了这个:

typedef struct product_data product_data;

struct product_data {
int product_code;
int product_size;
product_data *next;
};

product_data *products_head = NULL;
product_data *products_tail = NULL;

int main() {
int newcode = 5;
int newsize = 5;
products_head->product_code = newcode;
products_head->product_size = newsize;
products_head->next = NULL;

return 0;
}

不幸的是,程序在没有任何错误消息的情况下崩溃了。

然后我改变了一些部分:

typedef struct product_data product_data;

struct product_data {
int product_code;
int product_size;
product_data *next;
};

product_data *products_head = NULL;
product_data *products_tail = NULL;

int main() {
product_data *newproduct;
int newcode = 5;
int newsize = 5;
newproduct->product_code = newcode;
newproduct->product_size = newsize;
newproduct->next = NULL;

products_head = newproduct;

return 0;
}

这次没有崩溃,看来可以了。我不知道为什么。

有什么想法吗?

提前致谢!

最佳答案

这根本行不通。您仍在取消引用无效指针:

product_data *newproduct;
int newcode = 5;
int newsize = 5;
newproduct->product_code = newcode;
newproduct->product_size = newsize;
newproduct->next = NULL;

但在第一个版本中,当您取消引用明确设置为 NULL 的指针时,它会像应该的那样因段错误而崩溃。在这里,您取消引用了一个指针,该指针包含堆栈中的任何数据,不幸的是它没有崩溃。这是未定义的行为,因此不一定会崩溃。

你必须让你的指针指向有效的内存,

newproduct = malloc(sizeof product_data);

关于c - 创建链接列表时出现神秘的段错误(添加功能),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10903776/

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