c++ malloc()不断分配给相同的内存地址

标签 c++ pointers struct malloc

我正在尝试使用内存迭代创建“节点”。我的代码目前只是说明了它要去的地址,实际上并没有尝试在链表中建立链接。

这是节点的代码:

struct node {
  int num;
  node *next;
};

这是 malloc() 的代码

node *etc = (node*) malloc(sizeof(node));
etc->num = 1;
etc->next = NULL;
cout << etc << endl;

for (int i=2; i<=10; i++) {
  node *new_etc;
  new_etc = (node*) malloc(sizeof(node));
  cout << new_etc << endl;
}

编辑

输出:

0xcff010
0xcff030
0xcff050
0xcff070
0xcff090
0xcff0b0
0xcff0d0
0xcff0f0
0xcff110
0xcff130

最佳答案

cout << &new_etc << endl;

此处打印变量 new_etc 的地址,即存储指针 的内存位置,而不是它指向的地址。你想要的是:

cout << new_etc << endl;

打印 new_etc内容,即 malloc 返回的地址。

现在,由于您在每次迭代后释放内存,您可能会获得不同的地址以及相同的地址 - 毕竟,如果您释放内存 malloc 过去给你的,就代表可以重用。

关于c++ malloc()不断分配给相同的内存地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16715501/

相关文章:

c++ - 通过指针传递对象并修改它不会改变对象的状态

c++ - 使用析构函数进行线程连接

c++ - 如何在小型转储中更改模块的校验和?

c - 返回 Void 指针截断值

c++ - C++ 对象如何处理被分配数组文字?

C++ - 将原始指针分配给链表中的 unique_ptr 节点

C++在函数中使用指向结构的指针

arrays - 在哪里放置对结构数组进行操作的代码?

struct - 改变 F# [<Struct>] 记录

c - 在函数内动态分配结构体数组