我运行以下代码
int *pointer;
void fun1() {
int i;
pointer = &i;
*pointer = 11;
}
void fun2() {
printf("\nFun 2: Hello World\n");
}
int main() {
pointer = (int*) malloc(sizeof(int));
*pointer = 0;
fun1();
printf("%d\n",*pointer);
fun2();
printf("%d\n",*pointer);
return 0;
}
输出是
11
Fun 2: Hello World
20
我希望它是 11 而不是 20。我错过了什么?
谢谢。
最佳答案
这是一个未定义行为的示例。当调用fun1
时,pointer
指向fun1
中的自动局部变量。一旦 fun1
完成执行,该变量就不再存在。现在声明
printf("%d\n",*pointer);
调用未定义的行为。
您的程序中也存在内存泄漏。
关于C 全局指针值在不相关函数调用后发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31010018/