c-为什么在我的代码中创建一个链表会产生分段错误



我正在尝试做一个关于C的练习。有两个数组,countlistcount是最初用0填充的int数组,而list是队列数组。我的代码应该采用由空格分隔的成对数字,例如";12";。对于每一对数字,我必须在count数组中的2nd number-1位置加1,然后将队列头中包含第二个数字的节点放在list数组的1st number-1位置。我的代码在下面,在收到第一对数字后,它会导致分割错误。删除第24-30行删除了错误,但我不明白是什么原因导致了这个错误。有人能指出它为什么会出现分割错误吗?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node Node;
struct node {
int succ;
Node *next;
};
void set_initial_array(int count[], int n, Node *list[]);
void handle_input(char string[], int count[], Node *list[]);
void set_initial_array(int count[], int n, Node *list[]) {
for (int i = 0; i < n; i++) {
count[i] = 0;
list[i] = NULL;
}
}
void handle_input(char string[], int count[], Node *list[]) {
int j = atoi(&string[0]), k = atoi(&string[2]);
count[k - 1]++;
if (list[j - 1] != NULL) { // Removing line 24-30 removes error
Node head = {k, list[j - 1]};
list[j - 1] = &head;
} else {
Node head = {k, NULL};
list[j - 1] = &head;
}
}
int main() {
char string[4];
int count[15];
Node *list[15];
set_initial_array(count, n, list); //fill count with 0 and list with NULL
while (fgets(string, 4, stdin) != NULL && strcmp(string, "0 0") != 0) {
handle_input(string, count, list);
}
}

这里有一个问题:

Node head = {k, list[j - 1]};
list[j - 1] = &head;

head是一个局部变量,一旦handle_input函数返回,它就会超出作用域(或者简单地说:它将被销毁(。

在这一行list[j - 1] = &head;中,您将本地变量的地址存储在列表数组中,该数组实际上指向main中提供的数组。

您需要通过分配内存来以不同的方式处理此问题:

Node *head = malloc(sizeof(*head));
head->succ = k;
head->next = list[j - 1]
list[j - 1] = head;

不过可能还有其他问题,我没有检查。

不要忘记在main中的某个时刻释放已分配的内存。

相关内容

  • 没有找到相关文章

最新更新