在列表中添加元素

时间:2019-03-16 22:26:19

标签: c

我想知道分段错误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;
}

谢谢!

1 个答案:

答案 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访问某些内容,这是很大的禁止。因此,操作系统会检测到此情况,终止您的运行,并阻止您破坏它所爱和关心的一切。