众所周知,局部变量具有局部作用域和生命周期。考虑以下代码:
int* abc()
{
int m;
return(&m);
}
void main()
{
int* p=abc();
*p=32;
}
这给了我一个警告,一个函数返回一个局部变量的地址。我认为这是合理的:一旦 abc() 完成,本地可验证 m 就会被释放。所以我们在主函数中取消引用一个无效的内存位置。
但是,请考虑以下代码:
int* abc()
{
int m;
return(&m);
int p=9;
}
void main()
{
int* p=abc();
*p=32;
}
在这里,我得到了同样的警告。但我猜 m 返回时仍然会保留它的生命周期。怎么了?请解释错误。我的理由错了吗?