这是我的程序
int* fun1(void)
{
int n=9;
int *pf=&n;
cout<<*pf<<endl;
return pf;
}
int main(int argc, char *argv[])
{
int *p=fun1();
cout<<*p;
return 0;
}编译和运行程序不会给出任何问题,但对于valgrind,它会给出消息/警告"Invalid read of size 4“。
欢迎提供任何帮助来解决此警告问题
发布于 2013-11-05 17:45:01
将我的注释转换为答案:在函数返回后,您从函数外部引用了一个局部变量。这意味着,即使在运行程序时,这似乎也是有效的,因为在赋值之间堆栈保持不变。如果在赋值和打印之间调用其他函数,则很可能会失败。我说“最有可能”是因为你正在做的是未定义的行为,因此无法预测。
要解决这种特殊情况:在fun1中为堆上的n分配内存,并返回指向所述内存的指针,而不是您现在拥有的内存。
https://stackoverflow.com/questions/19785710
复制相似问题