【发布时间】:2020-04-13 07:01:56
【问题描述】:
例如:
struct sth {
int t;
char *p;
struct sth *next;
}
还有初始化代码:
struct sth *data = malloc(sizeof(*data));
memset(data, 0, sizeof(*data));
data->t = 0; // A
data->p = NULL; // B
data->next = NULL; // C
既然用了memset,还需要写A, B, C吗?
这只是一个示例,我有一个包含很多指针的结构...
【问题讨论】:
-
你是安全的——但请注意,仅仅因为你将每个字节设置为零,标准并不能保证指针
NULL(尽管它在我测试过的任何编译器上都可以)与 -- 但从迂腐的角度来看,您需要检查)另一方面,要完全兼容,将指针初始化留给NULL的成本很低。以上,您可以简单地使用calloc进行分配来完成同样的事情。 -
您可以通过使用
struct sth *data = calloc(1, sizeof(*data));分配来省略memset()
标签: c memory memory-management initialization malloc