我只是搞乱链接列表,但似乎我脑子里有很多错误.我用功能尝试了这个,但我无法使用它.我认为通过简化它可以使它变得正确,但它仍然不起作用.它通常只打印第一个元素,然后是随机的大数字(最有可能是内存地址)
我只是想创建一个列表并打印其内容.
#include <stdio.h>
#include <stdlib.h>
struct el{
int value;
struct el *next;
};
typedef struct el Elem;
int main()
{
int nr, i;
struct el *Head, *Conductor;
Head = malloc(sizeof(Elem));
Conductor = Head;
printf("How many elements do you want to add? ");
scanf("%d", &nr);
for(i = 0; i < nr; i++)
{
printf("Enter value for element %d: ", i);
scanf("%d", &(Conductor->value));
Conductor = Conductor->next;
Conductor = malloc(sizeof(Elem));
}
free(Conductor->next);
Conductor->next = NULL;
Conductor = Head;
printf("\n");
for(i = 0; i < nr; i++)
{
printf("%d -> ", Conductor->value);
Conductor = Conductor->next;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您应该分配的内存Conductor->next分配之前Conductor->next到Conductor.
for(i = 0; i < nr; i++)
{
printf("Enter value for element %d: ", i);
scanf("%d", &(Conductor->value));
Conductor->next = malloc(sizeof(Elem));
Conductor = Conductor->next;
}
Run Code Online (Sandbox Code Playgroud)
在分配之前进行分配很重要,否则"旧" Conductor->next将不会指向新分配Conductor.
您没有为next指针分配内存.
您需要在分配之前进行分配:
scanf("%d", &(Conductor->value));
Conductor->next = malloc(sizeof(Elem));
Conductor = Conductor->next;
Run Code Online (Sandbox Code Playgroud)