我正在尝试使用一组数据创建链接列表,我想知道是否有办法使变量的地址发生变化。类似的东西:
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和删除。
答案 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_ptr
和previous_ptr
的值立即失效。同时,new
返回的指针有资格重用,因此当您再次调用new
时,会得到相同的指针。
您不应该对计划再次使用的任何内容致电delete
。
此外,在previous_ptr
循环内声明的for
没有用,因为它的值在每次迭代时被抛弃。如果您希望在迭代之间保留该指针,请在循环外部声明它。