为什么此代码中的第一个cout<<*ptr
打印 100 和下一个cout<<*ptr
打印 0 中的主要方法是什么?
请清楚地描述在内存和程序中发生的事情。
// Define a global pointer
int *ptr;
int method()
{
// Define a variable local in this method
int local = 100;
// Set address of local variable (name of variable is local)
// in the ptr pointer
ptr = &local;
return -1;
}
int main()
{
// Call method
method();
// Print value of ptr pointer
cout<<*ptr<<"\n";
cout<<*ptr<<"\n\n";
return -1;
}
答案 0 :(得分:0)
正在发生的事情是,在method
中,它会分配一个名为int
的{{1}},其值为local
。它将全局100
指针int
设置为指向局部变量ptr
。然后local
超出范围,并且内存位置method
及其值变坏,因为取消分配了int local
。
local
的第一次使用很幸运,并在该位置找到有意义的值。 ptr
的第二种用法不是。由于ptr
的{{1}}变量不再存在,所以第一次获得任何有意义的值纯粹是运气。您不应该使用指向已解除分配的内容的指针。