为什么我的链接列表程序提供了SIGSEV?
问题描述:
我正在创建一个简单的链接列表程序来插入和查看LL的元素。当我尝试插入第二个元素时,它给出了SIGSEV,但我不明白为什么??!为什么我的链接列表程序提供了SIGSEV?
请帮我指出了问题:
的main.c:
#include <stdio.h>
#include <stdlib.h>
typedef struct linkedList{
int data;
struct linkedList *next;
}LL;
LL *start;
int main(){
int option = 0;
while(1){
printf("Enter option: \n");
scanf("%d", &option);
switch(option){
case 1:
addNode(start);
break;
case 2:
readNodes(start);
break;
case 3:
exit(0);
}
}
}
插入节点:
int addNode(LL *startNode){
LL *temp, *node;
int data = 0;
printf("Enter data: ");
scanf("%d", &data);
if(startNode == NULL){/*Application only when the first element is inserted*/
startNode = (LL*)malloc(sizeof(LL*));
if(startNode == NULL){
printf("Error: Memory not allocated!!\n");
exit(1);
}
startNode->data = data;
startNode->next = NULL;
start = startNode;
return 0;
}
temp = startNode;
while(temp != NULL){
temp = temp->next;
}
node = (LL*)malloc(sizeof(LL*));
node->data = data;
node->next = NULL;
temp->next = node;
temp = temp->next;
return 0;
}
答
-
sizeof
采取结构的长度,你总是在您的ca中传递4个字节se对于32位体系结构 - 您的while循环用于迭代
temp
节点错误,您应该检查next
节点是否为NULL
。
[在C中,您不应该使用'malloc'结果。](http://*.com/questions/605845/do-i-cast-the-result-of-malloc) – 2014-10-16 10:20:17
至于你的问题,*使用调试器*。调试器将帮助您找出崩溃的位置,以及帮助您找出造成它的原因。 – 2014-10-16 10:21:04
@JoachimPileborg是的,我用它。错误在行“temp-> next = node;”但我不明白为什么 – Amrit 2014-10-16 10:22:19