C中的数组初始化是否需要空检查?C中的数组初始化会失败吗?
我知道在 C 中,每次调用 malloc() 或 calloc() 时检查 NULL 指针是一种很好的做法。我必须对数组初始化做同样的事情吗?例如:
int sigcheck[5];
if (sigcheck == NULL) {return;}
2号线有必要吗?如果我没记错的话,数组初始化的工作原理就像在后台调用 calloc() 一样,这个底层功能是否考虑了 NULL 的可能性,或者我们自己做这件事是否有必要/好的做法。
回答
每次调用 malloc() 或 calloc() 时检查空指针是一种很好的做法
是的,因为这些函数被记录为在失败时返回 NULL。这是唯一的原因。
我是否必须为数组初始化做同样的事情
不。
2号线有必要吗?
不,这没有任何意义。该数组的地址不能为空,它总是在某处保存一个内存位置 - 它最终取决于 C 调用storage duration 的某些内容。在这种情况下,它或者具有静态存储持续时间或自动存储持续时间,这取决于它是否被分配的功能外或函数的内部。
如果我没记错的话,数组初始化的工作原理就像在后台调用 calloc()
你错了。calloc是程序员用于显式内存分配的一种特殊情况,因此称为分配的存储持续时间。malloc函数族永远不会被隐式或静默调用。(除非您调用一个声称malloc依次调用的函数,例如strdup。)
您可能会发现这个问题很有趣:程序对静态对象、自动对象和动态分配的对象使用不同的内存区域
- Overall, in case you are coming from Java or similar language where most things are silently stored on the heap... forget all about that. C is a completely different language.