gpt4 book ai didi

c - 递归打印链表时出现段错误

转载 作者:太空宇宙 更新时间:2023-11-04 00:17:49 25 4
gpt4 key购买 nike

我用 C 编写了一个链表(使用 gcc 编译器)并尝试递归打印它。它告诉“段错误”,并且只打印第一个值。谁能建议一个选项来纠正它..?这是我的代码。

#define MAX 10
#include <stdio.h>
#include <stdlib.h>
struct node {
int value;
struct node *next;
};

void printRecursively(struct node *start) {
if (start != NULL) {
printf("%d\n", start->value);
start = start->next;
printRecursively(start);
}
}

void main() {
struct node *nodes[MAX];
for (int i = 0; i < MAX; i++) {
nodes[i] = malloc(sizeof(struct node));
nodes[i]->value = i + 1;
nodes[i]->next = nodes[i + 1];
}
printRecursively(nodes[0]);
}

最佳答案

您的代码将每个新分配代码的 next 指针初始化为未初始化的值。向后运行循环并确保将 ast 节点的 next 指针初始化为 NULL

int main(void) {
struct node *nodes[MAX];
for (int i = MAX; i-- > 0;) {
nodes[i] = malloc(sizeof(struct node));
nodes[i]->value = i + 1;
nodes[i]->next = (i == MAX - 1) ? NULL : nodes[i + 1];
}
printRecursively(nodes[0]);

/* for good style, free the allocated memory */
for (int i = 0; i < MAX; i++) {
free(nodes[i]);
}
return 0;
}

如您所述,有一个简单的解决方案,即增加索引值并检查内存分配失败:

int main(void) {
struct node *nodes[MAX];
for (int i = 0; i < MAX; i++) {
nodes[i] = malloc(sizeof(struct node));
if (nodes[i] == NULL) {
fprintf(stderr, "memory allocation failure\n");
exit(1);
}
nodes[i]->value = i + 1;
nodes[i]->next = NULL;
if (i > 0) {
nodes[i - 1]->next = nodes[i];
}
}
printRecursively(nodes[0]);

/* for good style, free the allocated memory */
for (int i = 0; i < MAX; i++) {
free(nodes[i]);
}
return 0;
}

关于c - 递归打印链表时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44472886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com