【发布时间】:2014-12-21 14:05:14
【问题描述】:
我试图了解当堆栈/堆变量在 C 中混合时会发生什么,例如:
typedef struct E...
void foo(E* param) {
param = malloc(sizeof(E));
}
int main() {
E myParam;
foo(&myParam);
free(&myParam); //???
}
如果我们运行 main(),一些 struct myParam 会在 main 的栈帧上声明。但随后 foo() 将参数重新指向一个 malloc 的堆内存块。分配给 myParam 的堆栈内存会发生什么变化?即使我们在 myParam 中设置字段,它是否“浪费”并且不会改变?我们还能像上面的代码那样释放 malloc 的内存吗?
【问题讨论】:
-
foo()的param设置不影响myParam。param原来是myParam地址的副本。free(&myParam)不好。
标签: c memory malloc heap-memory stack-memory