C语言函数内局部变量释放的坑

首先把代码贴上来:

#include <stdio.h>
#include<windows.h>
int f(int **iptr){
    int a = 100;
    *iptr = &a;
    return 0;
}

int main() {
int x = 7;
int *n;
int **m;
n=&x;
m=&n;
printf("m: %d\n",**m);
f(m);
printf("m: %d\n",**m);
Sleep(1000);
printf("m is %d\n",**m);
return 0;
}

然后我把执行的结果贴上来:

 被红颜色框起来的地方就是坑。

这个双重指针**m所指向的值是在函数f中被改变成了100,但是函数f执行结束之后,**m所指向的变量a被释放。结果变成了0。

编译器环境是mingw -w64

猜你喜欢

转载自www.cnblogs.com/kgtone/p/11787249.html
今日推荐