我想知道分段错误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;
}
谢谢!
答案 0 :(得分:0)
当您尝试访问不属于您的内存时发生分段错误。
引用三本书(这是一本有关操作系统的书。请顺便阅读)的作者,分段错误只是一个花哨的词:
您有误 记住您对程序的记忆,我很生气。
list=malloc(sizeof(ll_t));
list->val=1;
list->next=NULL; <----- This is where the problem starts.
您将NULL
分配给list->next
。这意味着您无法使用list->next now points to the memory location
0x0000`。它用于存储操作系统正确运行程序所需的一些基本信息。
list->next->val=2; <----- This is where the problem ends (your program with it)
您尝试通过0x0000
访问某些内容,这是很大的禁止。因此,操作系统会检测到此情况,终止您的运行,并阻止您破坏它所爱和关心的一切。