【发布时间】:2016-08-27 18:01:40
【问题描述】:
我在理解我的教授作为链表示例给出的示例函数时遇到了一些困难。似乎分配的内存实际上不在main的范围内。但它似乎工作。以下是示例函数:
#define NEW(x) (x*)malloc(sizeof(x))
NODE *make_node (void *data) {
NODE *temp;
temp = NEW(NODE);
if (temp != NULL) {
temp->data = data;
temp->next = NULL;
}
return temp;
}
int insert_at_tail(ROOT *r, DATA *d) {
NODE *temp;
temp = make_node(d);
if (temp == NULL) // fail, cannot create new NODE
return -1;
if (r == NULL) {
r = make_root();
if (r == NULL) // fail, cannot create ROOT
return -1;
}
(r->num)++;
if (r->num == 1) { // if previously the list is empty
r->head = r->tail = temp;
}
else {
r->tail->next = temp;
r->tail = temp;
}
return 0;
}
在我看来,函数 insert_at_tail 调用 make_node 函数,然后在函数 insert_at_tail 中返回一个内存位置。但是那个内存位置在那个函数的范围内吗?然后将内存分配给链表数据。为什么在主函数中链表数据仍然可以访问该内存?我认为 malloc 不是全球性的。谢谢阅读!希望有人能帮我解惑。
【问题讨论】:
-
顺便说一句
r = make_root();也许这不起作用。
标签: c linked-list malloc