gpt4 book ai didi

c - 在列表中添加一个元素

转载 作者:行者123 更新时间:2023-11-30 16:20:42 24 4
gpt4 key购买 nike

我想知道段错误11的原因是什么。我已经编写了向列表添加新元素的代码。但它永远无法成功运行,而且我也不知道如何更改我的代码。

typedef struct ll{
int val;
struct ll *next;
}ll_t;

int main(int argc, const char * argv[]) {
// insert code here...
//int i;
//int shmid;
ll_t *list=NULL;
//int *array=NULL;

list=malloc(sizeof(ll_t));
list->val=1;
list->next=NULL;

list->next->val=2;
list->next->next=NULL;

while(list->next!=NULL){
printf("the number is: %d", list->val);
list=list->next;
}
return 0;
}

谢谢!

最佳答案

当您尝试访问不属于您的内存时,会发生段错误。

引用《Three Easy Pieces》一书的作者的话(这是一本关于操作系统的书。顺便说一句,读得很好),段错误只是一个花哨的词:

YOU DID SOMETHING WRONG WITH MEMORY YOU FOOLISH PROGRAMMER AND I AM ANGRY.

list=malloc(sizeof(ll_t));
list->val=1;
list->next=NULL; <----- This is where the problem starts.

您将NULL 分配给list->next。这意味着 list->next 现在指向您不可用的内存位置0x0000`。它用于存储操作系统正常运行程序所需的一些基本信息。

list->next->val=2;  <----- This is where the problem ends (your program with it)

您尝试访问 0x0000 处的某些内容,这是一个很大的禁忌。因此操作系统会检测到这一点,终止您,并阻止您破坏它所喜爱和关心的一切。

关于c - 在列表中添加一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55202106/

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