我正在创建一个带有 for 循环的链表,并在 for 循环内执行 malloc。我遇到的问题是在 for 循环内部,malloc
总是返回相同的内存地址!
我认为它应该在每次迭代时返回不同的地址,以便我可以链接节点。当前输出意味着程序总是覆盖相同的地址,我无法链接节点,因为一直只有一个节点。是否正确?
struct list_node {
char *id;
char *url;
struct list_node *next;
};
int main(void) {
int j;
for (j = 0; j < 5; j++) {
struct list_node *new_node = malloc(sizeof(struct list_node));
printf("No %d has address %p\n", j, &new_node);
}
}
=>
No 0 has address 0x7fff5db122b0
No 1 has address 0x7fff5db122b0
No 2 has address 0x7fff5db122b0
No 3 has address 0x7fff5db122b0
No 4 has address 0x7fff5db122b0
有人知道吗?
最佳答案
您正在打印 &new_node
,指针的地址,而不是指针本身。在您的情况下,&new_node
是一个运行时的常量值。
如果要打印 malloc()
返回的指针,只需提供变量 new_node
,并将其转换为 void *
。
这就是说,尽管是一个片段,但只是一个忠告,你错过了 free()
调用。它导致内存泄漏。
关于使用 malloc 在 for 循环中创建链表总是返回相同的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42688059/