【发布时间】:2023-12-24 16:56:01
【问题描述】:
我刚开始使用 C,我认为整个指针/malloc/free 让我发疯。我试图定义一个简单的线性递归数据结构并循环遍历它,打印我循环遍历的每个元素。 (代码如下)。
但是,当我尝试移动到下一个元素以“插入”新元素时,我得到了 Segmentation Fault: 11
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct number_list {
int num;
struct number_list *next_num;
} numlist;
int main() {
numlist *cur, *pointer;
numlist *NewList=NULL;
cur = NewList;
cur = malloc(sizeof(numlist));
cur->num=5; // this operation is never reached too
cur = cur->next_num // Must I malloc?
printf("Reached."); // Is never reached.
cur->num=9;
pointer=NewList;
while (pointer!=NULL) {
printf("%d", pointer->num);
pointer=pointer->next_num;
}
return 0;
}
此外,我在另一个更大的程序中有一个 while 循环,它的功能与这里的这个 while 循环完全一样,除了“填充”递归结构。因此,我实际上不需要创建任何新元素,只需运行并打印出每个元素。但是,在循环打印最后一个元素的那一刻,它再次崩溃,并出现 Segmentation Fault: 11。我猜这很可能是因为我试图做pointer = pointer->next_num。无论如何,我如何正确地在 C 上正确运行这样的数据结构?
【问题讨论】:
标签: c recursive-datastructures