为什么这段代码不打印"20"?

use*_*974 1 c heap malloc stack memory-management

void fun(int* x){
    x=(int*)malloc(sizeof(int));
    *x = 20;
}

int main(){
    int y=31;
    fun(&y);
    printf(%d,y);
}
Run Code Online (Sandbox Code Playgroud)

为什么这段代码能够成功编译?

评论:它是在Eclipse上编译的我在线看到问题:x =(int*)malloc(sizeof(int));

为什么这个程序没有在运行时崩溃?

250*_*501 6

代码在语法上没有任何问题,因此它编译.

地址y传递给函数.x保存地址的函数中的指针y被malloc分配的有效内存地址覆盖.在那里写入int而不是y指针的值被更改.然后函数返回(分配的内存为fun'泄漏').

主要值y保持不变.

定义了该程序的行为.