【发布时间】:2015-11-08 07:31:41
【问题描述】:
我一直在尝试在 C 中实现 LinkedList 以实际实现我在 C 中学到的理论。我不断收到 Segmentation fault: 11. 任何有关如何解决此问题的帮助将不胜感激。这是我的代码:
#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;
}
【问题讨论】:
-
先检查 gdb。
-
@SouravGhosh 你能告诉我gdb是什么吗?
-
使用
malloc分配的每个内存都应该使用free释放。因此,您需要自己管理内存,即进行簿记并确保没有内存泄漏。见:en.wikipedia.org/wiki/C_dynamic_memory_allocation#Common_errors -
gdb 是一个调试器。如果您使用另一个调试器,请使用它并发布其输出
-
list->firstElement 未定义(未初始化)第一次添加运行
标签: c memory-management