0

我正在尝试用一组数据创建一个链表,我想知道是否有办法改变变量的地址。就像是:

for(int i=array.size()-1;i>=0;i--)
{
    Node *previous_ptr;
    Node *current_ptr = new Node(array[i], previous_ptr);
    previous_ptr=current_ptr;
    delete current_ptr;
}

因此,我希望 current_ptr 的地址发生变化(分配不同的内存位置),以便在可能的情况下构建链表。而且我不能只为它使用alloc new 和delete。

4

2 回答 2

0

据我所知,如果您考虑后台发生的事情,您无法更改变量地址,这对我来说没有任何意义。如果您需要不同的数据地址,请分配新内存,第二次存储数据并删除旧数据。

于 2013-10-20T00:42:04.553 回答
0

new每次调用都会产生不同的地址,除非你调用,delete在这种情况下内存变得可重用,因此操作员new可以再次返回它。

您的代码创建悬挂指针:当您delete在第 3 行调用时

Node *current_ptr = new Node(array[i], previous_ptr);
previous_ptr=current_ptr;
delete current_ptr;

current_ptr和的值previous_ptr立即变为无效。同时,返回的指针new变得可以重用,所以当你new再次调用时,你会得到相同的指针。

你不应该调用delete任何你打算再次使用的东西。

此外,previous_ptr在循环中声明for是没有用的,因为它的值在每次迭代时都会被丢弃。如果您想在迭代之间保留该指针,请在循环外声明它。

于 2013-10-20T01:38:08.850 回答