【发布时间】:2015-04-01 10:18:08
【问题描述】:
我知道声明一个ststic变量并以这种方式初始化它static int *st_ptr = malloc(sizeof(int));会产生一个编译错误消息(类型初始化元素不是常量),并通过这种方式使用单独的语句来解决这个问题static int *st_ptr;
st_ptr = malloc(5*sizeof(int));
在这种情况下我需要了解初始化运算符和赋值运算符之间的区别?以及为什么这种方式解决了问题?
【问题讨论】:
-
两者都非常危险,除了学习之外,应该避免。
-
您的第二个示例将编译,但它仍然是错误的:它会在每次调用函数时分配新的存储,泄漏旧的。将变量初始化为 NULL,并在调用
malloc之前检查是否为 NULL,以便只调用一次。 -
@DavidHaim:你到底在说什么?
-
@DavidHaim:无论如何,您都应该在此处添加您所指的内容。因为 OP 甚至不包含真正的 sn-p,而且您的评论听起来确实像“两种情况都应该避免”(所以听起来您建议完全避免使用 malloc)因为他只是输入了一些代码我没想到,他可能已经忘记了什么。因此,要获得您所警告的内容并没有很好地说明;)
-
@Wyzard 你向我添加了新概念,谢谢
标签: c pointers static initialization malloc