【发布时间】:2012-12-12 01:47:23
【问题描述】:
c中的全局变量和堆变量有什么区别和相似之处?
假设我有这段代码。
const char* globalVar = "This is a string";
int main(int argc, char* argv[]){
char* heapVar = malloc(7 * sizeof(char));
}
那么 globalVar 和 heapVar 有什么区别和相似之处呢?
提前致谢。
【问题讨论】:
-
为了安全起见,将其设为 const char*,因为您不能在该字符串上写字。
-
注意:您的
heapVar实际上是一个自动(“堆栈”)变量,它指向堆存储。一旦 main() 返回或退出,'heapVar` 将不再存在,但 它所引用的对象 仍然存在。对于 main() 这当然是一个小问题,(如果 main 返回,则程序不应该再存在,除了 atexit 处理程序),但对于“普通”函数,区别非常明显。结果是内存泄漏。 -
+1 请注意,wildpasser 说:heapVar 指向堆存储,但它在堆栈中。
-
我们正在回答一个非常基本的家庭作业问题,OP 的教授希望 OP 能够通过关注他/她的笔记/教科书/课程材料来弄清楚。
标签: c global-variables heap-memory