【问题标题】:I cannot traverse through my linked list, after creating an array of nodes创建节点数组后,我无法遍历我的链表
【发布时间】:2015-04-28 05:04:19
【问题描述】:

我为链表创建了一个节点数组,但是当我尝试遍历打印我的链表时,我崩溃了。当我不创建节点数组时,我的遍历很有效,所以我认为这段代码是我的问题。

   typedef struct node {
book data;
struct node *next;
} *Node;

Node newNodes[100];
int i = 0;
for (i=0; i<n; i++) 
{
    newNodes[i] = (Node)malloc(sizeof(struct node)); 
    newNodes[i]->next = NULL;
    newNodes[i]->data.time = NULL;
    newNodes[i]->data.format = NULL;     
}


//return struct that holds the array;

很明显我做错了什么,顺便说一句,insert_node 是一个非常简单的在前端插入算法。谁能看到我哪里出错了?

【问题讨论】:

  • n 是函数的一个参数,我的一些代码被砍掉了。
  • newNodes 是局部变量吗?如果是这样,您不能返回newNodes,因为它会超出范围。如果没有,请显示整个函数。
  • 它是本地的。我应该为新节点分配空间吗?
  • 是的,你需要。就像 JS1 所说的那样,只要方法返回 newNodes(它存在于股票上)就会消失。所以返回的是垃圾并且你有内存泄漏,因为 malloc 的节点是“搁浅”的——它们仍然被分配,但你丢失了指向它们的指针。
  • 那么我如何在节点数组上进行 malloc?感谢您的帮助。

标签: c arrays linked-list


【解决方案1】:

谁能看出我哪里出错了?

发布的代码显示您已经创建了 100 个指针,并根据malloc 返回的值为它们分配了内存。但是,您还没有将它们链接在一起形成一个链表。

也许你打算使用:

for (i=0; i<n; i++) 
{
    newNodes[i] = (Node)malloc(sizeof(struct node)); 
    newNodes[i]->next = NULL;
    newNodes[i]->data.time = NULL;
    newNodes[i]->data.format = NULL;     
}

// Make the links between the nodes.
for (i=0; i<n-1; i++) 
{
   newNodes[i]->next = newNodes[i+1];
}

这将使newNodes[0]成为链表的头部。

附言

使用名为Nodetypedef 是一个非常令人困惑的指针,至少对我来说是这样。我建议使用:

typedef struct node {
    book data;
    struct node *next;
} Node;

typedef Node* NodePtr;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    相关资源
    最近更新 更多