C 全局指针值在不相关函数调用后发生变化

标签 c pointers memory

我运行以下代码

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/

相关文章:

c - 如何通过指令读取二进制可执行文件?

c - C 中带有结构的 Malloc

c - 指针如何提高程序效率?

c# - 这个 LINQ 性能从何而来?

c++ - 如何检查我的 C++ 程序在内存中的增长状态?

c - gcc 将自动调整结构大小

c - 如何使用分块编码发送 HTTP 回复?

c - 如何将 C 指针递增 2

Java JNA u32t 指针(内存)的返回值

c++ - 如何确定 C++ 中详细的调用堆栈信息?