我已经编写了一个用于在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)
。
我究竟做错了什么?
答案 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);