C - 分段故障错误中的单链表项目

时间:2016-09-27 07:38:06

标签: c data-structures linked-list

我已经编写了一个用于在C中实现单链接列表的代码。当我的代码编译时,我在尝试运行代码时遇到了分段错误。

守则是:

#include <stdio.h>
#include<stdlib.h>

struct Node{
    int data;
    struct Node* next;
};
struct Node* head;

void InsertAtPosition(int data, int n){
    int i;
    struct Node* temp1 = (struct Node*)malloc(sizeof(struct Node*));
    temp1->data = data;
    temp1->next = NULL;
    if(n == 1){
            temp1->next = head;
            head = temp1;
            return;
    }
    struct Node* temp2 = head;
    for(i=0; i<n-2; i++){
            temp2 = temp2->next;
    }
    temp1->next = temp2->next;
    temp2->next = temp1;
}

void Print(){
    struct Node* temp = head;
    printf("List is: \n");
    while(temp != NULL){
            printf("\t%d\n", temp->data);
            temp = temp->next;
    }
}

int main(){
    head = NULL;
    InsertAtPosition(10, 1);
    InsertAtPosition(11, 2);
    InsertAtPosition(12, 3);
    Print();
    return 0;
}

代码提供错误Segmentation fault (core dumped)

我究竟做错了什么?

2 个答案:

答案 0 :(得分:3)

(struct Node*)malloc(sizeof(struct Node*)) 

错误,你正在创建一个指针大小的内存。尝试

(struct Node*)malloc(sizeof(struct Node))

答案 1 :(得分:0)

之前的回答涵盖了它。但我可以在程序中再看到一个段错误。如果 export TSLIB_CALIBFILE='/etc/pointercal' export TSLIB_CONFFILE='/etc/ts.conf' export TSLIB_PLUGINDIR='/usr/lib/ts' export TSLIB_TSDEVICE=`cat /etc/ts.dev 2>/dev/null` export QWS_DISPLAY=LinuxFB:mmWidth=800:mmHeight=480 export QWS_MOUSE_PROTO=Tslib:/dev/input/event0 的值超过列表的大小,则此部分代码将中断。

n

在主函数中,如果更改函数调用的顺序,则会看到此段错误

for(i=0; i<n-2; i++){
        temp2 = temp2->next;
}

要解决此问题,请进行以下更改

InsertAtPosition(11, 2);
InsertAtPosition(10, 1);
InsertAtPosition(12, 3);