我试图了解在C中混合使用堆栈/堆变量时发生的情况,例如:
typedef struct E...
void foo(E* param) {
param = malloc(sizeof(E));
}
int main() {
E myParam;
foo(&myParam);
free(&myParam); //???
}
如果运行main(),则会在main的堆栈框架上声明一些struct myParam。但是然后foo()将param指向一个malloc分配的堆内存块。分配给myParam的堆栈内存会怎样?即使我们在myParam中设置了字段,它是否“浪费”了并且不会改变?而且我们还能像上面的代码那样释放malloc的内存吗?
最佳答案
分配给myParam的堆栈内存会怎样?
没有。
即使我们在myParam中设置了字段,它是否“浪费”了并且不会改变?
不,这不会浪费。如果在myParam
中设置字段,它将改变。
而且我们还能像上面的代码那样释放malloc的内存吗?
不,你不能。在foo
中分配的内存将分配给局部变量。这是内存泄漏。呼唤
free(&myParam);
导致不确定的行为。没有使用
&myParam
(或其功能族)分配malloc
。这是导致未定义行为的原因。关于c - 如果通过malloc重新分配堆栈变量,会发生什么情况?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26569864/