【问题标题】:Segmentation Fault 11, C分段错误 11,C
【发布时间】: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


【解决方案1】:

因此,您的代码存在一些问题。 struct LinkedList list 未分配。当您执行list-&gt;firstElement 时,它会出错。用

初始化它

struct LinkedList list = {NULL}

同样newElement 不分配nextElement。您还需要将其设置为NULL,否则该访问会出错。

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

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

【讨论】:

  • 谢谢,这就是解决方案。
猜你喜欢
  • 2014-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多