注册 登录
编程论坛 C语言论坛

下面这段代码是不规范的,程序可能运行出错,原因是:通过指针p访问局部变量tmp,而tmp的空间在函数hoho运行结束后已经释放

黑暗骑士5D 发布于 2020-02-25 16:26, 1712 次点击
int* hoho(int n){
    int tmp;
    tmp += n;
    return &tmp;
}
/* 此处省略若干行代码 */
int main(){
    /* 此处省略若干行代码 */
    int *p;
    p = hoho(3);
    /* 此处省略若干行代码,且这些代码不会修改p的值 */
    *p = 6;
    return 0;
}

正确还是错误
2 回复
#2
林月儿2020-02-25 16:50
自动释放资源?
#3
liujin22020-02-25 17:54
int* hoho(int n){
     int tmp;  //局部变量,存储在stack中,退出函数后空间将被释放。
     tmp += n; //tmp 未初始化,将会是一个随机值
     return &tmp;
 }
int main(){
     /* 此处省略若干行代码 */
     int *p;
     p = hoho(3); //p 为已经释放的空间地址
     /* 此处省略若干行代码,且这些代码不会修改p的值 */
     *p = 6;   //对无效地址赋值,造成程序错误。
     return 0;
 }
1