C++ 指针赋值给出了意想不到的(?)结果
Posted
技术标签:
【中文标题】C++ 指针赋值给出了意想不到的(?)结果【英文标题】:C++ Pointers assignment gives unexpected(?) results 【发布时间】:2021-11-06 15:10:24 【问题描述】:int* snap = nullptr;
int last = -1;
void func(int* md)
if(snap!=nullptr)
last = *snap;
snap = md;
cout<<last<< " "<<*snap<<endl;
int main()
for(int i =0;i<10;i++)
int arg = i;
func(&arg);
return 0;
`
输出
-1 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
'last' 变量不应该具有上一次迭代的'snap' 值。但值是相等的。我在这里做错了什么?
【问题讨论】:
"上一次迭代的 'snap' 值。" -- 在当前迭代过程中,这个值(不是值的地址,而是值本身)到底存储在哪里迭代? 感谢您的帮助。我现在已经意识到我的错误了。我让给定指针指向的值更改而不存储正在更改的值 【参考方案1】:在 for 循环的第二次迭代中,snap
指向一个悬空指针。它指向的int arg
已超出范围。
虽然它是一个悬空指针,但您取消引用它,导致未定义的行为。
【讨论】:
我已将 arg 变量设为全局变量。结果似乎没有改变 @sanity_overflow 如果将其设为全局,snap
与&arg
相同,因此*snap
与arg
是相同的对象。也就是说,您的代码相当于分配last = arg;
,然后打印last
和arg
。以上是关于C++ 指针赋值给出了意想不到的(?)结果的主要内容,如果未能解决你的问题,请参考以下文章