为什么我的链接列表程序提供了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; 
} 
+3

[在C中,您不应该使用'malloc'结果。](http://*.com/questions/605845/do-i-cast-the-result-of-malloc) – 2014-10-16 10:20:17

+4

至于你的问题,*使用调试器*。调试器将帮助您找出崩溃的位置,以及帮助您找出造成它的原因。 – 2014-10-16 10:21:04

+0

@JoachimPileborg是的,我用它。错误在行“temp-> next = node;”但我不明白为什么 – Amrit 2014-10-16 10:22:19

  1. sizeof采取结构的长度,你总是在您的ca中传递4个字节se对于32位体系结构
  2. 您的while循环用于迭代temp节点错误,您应该检查next节点是否为NULL