我不确定我在C中尝试创建的以下简单LinkedList实现有什么问题。我尝试使用printf语句调试我的代码,所有内容似乎都匹配,直到最后的printf语句。非常感谢所有帮助。
#include <stdio.h>
#include <string.h>
struct Cell
{
int info;
struct Cell *next;
};
void add(struct Cell *orig, int a)
{
struct Cell newCell;
orig->next = &newCell;
newCell.info = a;
printf("New Cell: %d\n", newCell.info);
printf("New Cell Address: %x\n", &newCell);
printf("Test: %d\n", (&newCell)->info);
}
int main()
{
struct Cell LinkedList;
struct Cell *ip = &LinkedList;
/* First Element */
LinkedList.info = 10;
add(ip, 15);
printf("#1: %d\n", ip->info);
printf("Adress: %x\n", ip->next);
printf("#2: %d\n", (ip->next)->info);
return 0;
}
答案 0 :(得分:0)
尝试使用此添加功能来解决问题
void add(struct Cell *orig, int a)
{
struct Cell *newCell=(struct Cell *)malloc(sizeof(struct Cell));
orig->next = newCell;
newCell->info = a;
printf("New Cell: %d\n", newCell->info);
printf("New Cell Address: %x\n", &newCell);
//printf("Test: %d\n", newCell)->info);
}
构建链表您应该使用库malloc()
中的stdlib.h
函数为每个节点分配内存
答案 1 :(得分:0)
你的代码首先有数字问题在哪里是malloc?应始终使用malloc为链接列表的每个节点分配足够的内存,以便编译器分配内存并为您返回指针。 而且,当插入第一个节点时,你需要一个指向指针动作的指针! 因为指向列表第一个nide的指针实际上是指针的一个指针,它实际上是列表的地址。因此,您应该使用if语句插入第一个节点,并确保更改列表的地址 而且最重要的是 请练习指针真的很难,因为它们很难掌握,但值得掌握!