【发布时间】:2010-04-15 21:01:53
【问题描述】:
下面,我用 C 语言编写了一个原始单链表。函数“addEditNode”必须按值接收指针,我猜这意味着我们可以编辑指针的数据,但不能将其指向其他东西。如果我在“addEditNode”中使用 malloc 分配内存,当函数返回时,我可以看到 first->next 的内容吗?第二个问题是我必须先释放 -> 下一个还是我应该先释放?我在 Linux 上遇到分段错误。
#include <stdio.h>
#include <stdlib.h>
typedef struct list_node list_node_t;
struct list_node
{
int value;
list_node_t *next;
};
void addEditNode(list_node_t *node)
{
node->value = 10;
node->next = (list_node_t*) malloc(sizeof(list_node_t));
node->next->value = 1;
node->next->next = NULL;
}
int main()
{
list_node_t *first = (list_node_t*) malloc(sizeof(list_node_t));
first->value = 1;
first->next = NULL;
addEditNode(first);
free(first);
return 0;
}
【问题讨论】:
-
这是作业吗?如果是这样,它应该有作业标签。除此之外,上面的代码很好,除了你的免费。您需要释放所有已分配的内存。创建一个遍历列表的循环,随时释放节点。
标签: c pointers linked-list structure