【发布时间】:2016-08-03 09:09:21
【问题描述】:
void fun(int* x){
x=(int*)malloc(sizeof(int));
*x = 20;
}
int main(){
int y=31;
fun(&y);
printf(%d,y);
}
为什么这段代码还是编译成功了?
评论:它是在 Eclipse 上编译的 我在网上看到了问题: x=(int*)malloc(sizeof(int));
为什么这个程序在运行时没有崩溃?
【问题讨论】:
-
因为 C 给了你足够的绳子让你上吊。
-
删除
x=(int*)malloc(sizeof(int));,%d-->"%d\n" -
不要在 C 中强制转换 malloc 的结果,使用 sizeof(*x) 代替 sizeof(int)。
-
您正在传递堆栈变量的地址,分配一些堆内存,并将其中的值设置为 20,您永远不会修改堆栈变量。相反,您正在泄漏内存
-
不要撒谎。
printf(%d,y);编译?把我吊起来。
标签: c memory-management malloc heap-memory stack-memory