2015-11-08 83 views
-3

我一直试图在C中实现一个LinkedList以实际实现我在C中学到的理论。我一直得到一个Segmentation fault: 11.任何有关如何解决这个问题的帮助将不胜感激。这里是我的代码:Segmentation Fault 11,C

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

struct Element { 
    int value; 
    struct Element *nextElement; 
}; 

struct LinkedList { 
    struct Element *firstElement; 
}; 

void add(struct LinkedList *list, int value) { 
    if(list->firstElement == NULL) { 
     struct Element *newElement; 
     newElement = malloc(sizeof(struct Element)); 

     newElement->value = value; 

     list->firstElement = newElement; 
    } else { 
     struct Element *lastElement; 

     lastElement = list->firstElement; 

     while(lastElement->nextElement != NULL) { 
      lastElement = lastElement->nextElement; 
     } 

     struct Element *newElement; 
     newElement = malloc(sizeof(struct Element)); 

     newElement->value = value; 

     lastElement->nextElement = newElement; 
    } 
} 

void showAllElements(struct LinkedList *list) { 
    struct Element *lastElement = list->firstElement; 

    while(lastElement != NULL) { 
     printf("%d\n", lastElement->value); 
     lastElement = lastElement->nextElement; 
    } 
} 

int main() 
{ 
    struct LinkedList list; 
    add(&list, 5); 
    add(&list, 10); 
    add(&list, 15); 
    showAllElements(&list); 

    return 0; 
} 
+4

先用gdb检查一下。 –

+0

@SouravGhosh你能告诉我gdb是什么吗? –

+0

您使用'malloc'分配的每个内存都应该使用'free'释放。所以你需要自己管理记忆,那就是做记录并确保没有记忆泄漏。请参阅:https://en.wikipedia.org/wiki/C_dynamic_memory_allocation#Common_errors –

回答

0

所以,你的代码有几个问题。 struct LinkedList list未分配。当你做list->firstElement时它会出错。与

struct LinkedList list = {NULL}

而且newElement初始化它不会给nextElement。您还需要将其设置为NULL,否则在访问时会出错。

struct Element *newElement; 
    newElement = malloc(sizeof(struct Element)); 

    newElement->value = value; 
    newElement->nextElement = NULL; 
+0

谢谢,这是解决方案。 –

相关问题