C LinkedList问题

时间:2016-02-06 22:43:41

标签: c

我不确定我在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;
}

2 个答案:

答案 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语句插入第一个节点,并确保更改列表的地址 而且最重要的是 请练习指针真的很难,因为它们很难掌握,但值得掌握!