我正在创建一个带有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
任何人都有这方面的线索吗?
答案 0 :(得分:5)
您正在打印&new_node
,指针的地址,而不是指针本身。在您的情况下,&new_node
是一个运行时的常量值。
如果要打印malloc()
返回的指针,只需提供变量new_node
,然后将其转换为void *
。
这就是说,只是一句忠告,尽管是一个片段,但你错过了free()
次电话。它导致内存泄漏。
答案 1 :(得分:2)
您正在打印&newnode
。这是指针的地址。这将永远是相同的。
指针newnode
中的值会发生什么变化。
如果您打印
printf("No %d has address %p\n", j, new_node);
每次都应该按预期获得不同的值。