创建新的循环链表时出现段错误
Segmentation fault when creating a new cyclical interlinked list
我正在尝试实现一个循环链接列表。但是,当我尝试 运行 我的程序时收到 Segmentation fault (core dumped)
消息。
我有一个简单的 list.h
文件,我在其中定义了所有 structs
和 functions
.
/**
* @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
但我不知道是什么。
你能告诉我我做错了什么吗?
您取消了对 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;
}
我正在尝试实现一个循环链接列表。但是,当我尝试 运行 我的程序时收到 Segmentation fault (core dumped)
消息。
我有一个简单的 list.h
文件,我在其中定义了所有 structs
和 functions
.
/**
* @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
但我不知道是什么。
你能告诉我我做错了什么吗?
您取消了对 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;
}