【发布时间】: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