【问题标题】:Segmentation fault when creating a new cyclical interlinked list创建新的循环链接列表时出现分段错误
【发布时间】:2021-04-25 19:20:52
【问题描述】:

我正在尝试实现一个循环链接列表。但是,当我尝试运行我的程序时,我收到了 Segmentation fault (core dumped) 消息。

我有一个简单的list.h 文件,我在其中定义了我所有的structsfunctions

/**
 * @brief  defines a cyclical interlinked list
 */
typedef struct node {
    int          number;  // save a number for learning purpose
    struct node *next;    // pointer to the next node in the list
} node_t;

/**
 * @brief  defines a variable for the cyclical interlinked list
 *         -> this is the only known element
 */
static node_t *person_list;
    
/**
 * @brief Constructor
 */
void list_new();

然后我在我的list.c 文件中实现了这一点。

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

void list_new() {
    node_t *pointer = malloc(sizeof(node_t));
    
    if (pointer == NULL) {
        fprintf(stderr, "ERROR: failed to allocate a new list");
        exit(EXIT_FAILURE);
    }
    
    person_list->next = pointer;
    
    if (person_list == person_list->next) {
        printf("It works.");
    }   
}

但是,我的电话 list_new() 似乎不起作用。

#include "list.h"

int main(int argc, char* argv[])
{
    list_new();
    return EXIT_SUCCESS;
}

我知道segmentation fault 是在尝试访问“不属于您”的内存时导致的特定错误。但我不知道我在哪里尝试访问不属于我的内存。

我的假设是,我对静态变量 person_list 做错了什么,但我不知道是什么。

你能告诉我我做错了什么吗?

【问题讨论】:

    标签: c linked-list c99


    【解决方案1】:

    您取消引用 person_list 却没有为其分配有效指针。

    修复示例:

    #include <stdlib.h>
    #include "list.h"
    
    int main(int argc, char* argv[])
    {
        person_list = malloc(sizeof(*person_list)); /* allocate and assign valid pointer */
        if (person_list == NULL) return 1; /* check if allocation is successful */
    
        list_new();
        return EXIT_SUCCESS;
    }
    

    【讨论】:

      猜你喜欢
      • 2014-01-25
      • 2016-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 2013-02-01
      • 2017-01-30
      相关资源
      最近更新 更多