使用 malloc 在 for 循环中创建链表总是返回相同的地址

标签 c for-loop linked-list malloc

我正在创建一个带有 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/

相关文章:

c - 在 OSX 上安装 rng-tools 时出现 undefined symbol argp_parse 和 arpg_usage

c - 在 Linux 中向 C 程序添加命令

javascript - For loop let scope stackblitz vs chrome 开发工具

java - 在链表数组中找到最长的链表

c++ - 随着类别的变化而改变输入的数量

c - 如何从未知输入类型(文件流或标准输入)读取数据 C

c - 我们什么时候应该使用 stdint.h 中定义的整数类型?

c - 这些 for 循环有什么区别?

c - 删除链表中给定位置的节点

C - 删除双向链表中的节点