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));
为什么这个程序没有在运行时崩溃?
代码在语法上没有任何问题,因此它编译.
地址y传递给函数.x保存地址的函数中的指针y被malloc分配的有效内存地址覆盖.在那里写入int而不是y指针的值被更改.然后函数返回(分配的内存为fun'泄漏').
主要值y保持不变.
定义了该程序的行为.