有没有办法改变变量的地址?

时间:2013-10-20 00:18:37

标签: c++ memory-management

我正在尝试使用一组数据创建链接列表,我想知道是否有办法使变量的地址发生变化。类似的东西:

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和删除。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

new每次调用时都会生成不同的地址,除非您调用delete,在这种情况下内存可以重复使用,因此运算符new可以再次返回。

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

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

current_ptrprevious_ptr的值立即失效。同时,new返回的指针有资格重用,因此当您再次调用new时,会得到相同的指针。

您不应该对计划再次使用的任何内容致电delete

此外,在previous_ptr循环内声明的for没有用,因为它的值在每次迭代时被抛弃。如果您希望在迭代之间保留该指针,请在循环外部声明它。

相关问题