(如果有人有建议,我会改写标题,我知道这有点尴尬。)
在 C 中使用 malloc()
为动态数组分配内存时,我知道通过验证指针不为 NULL 来检查调用是否成功。是否需要对 C 中显式声明的数组执行相同的检查,例如在以下示例中(取自 this question)?
char arrinit[5];
char (*arrinit_two)[5] = &arrinit;
最佳答案
简而言之:不!
编译器将确保您的数组具有您静态定义的足够内存。
通常(取决于您声明它们的方式),它们将分配在堆栈上,当堆栈上没有足够的内存时,您的程序可能会在您进行任何检查之前崩溃,否则您将不会能够采取任何补救措施。
顺便说一句:无论如何,你也不会得到 NULL 值,因为系统会给你一些地址值,即使没有剩余内存(或者它之前已经崩溃)。
当然有一种情况,您应该小心:当您想要分配非常大量的内存(一个大数组)时,您应该使用 malloc 来分配。在许多系统上,进程的堆栈大小受到限制,因此当您在堆栈上分配大量内存(编译器为您完成)时比使用 malloc 时(因为有不是相同的限制)。
当然,在今天的计算机上,这意味着,在它产生任何影响之前,您可以拥有至少一些 MB 的数组。对于 < 1MB 的数组,您无需费心。
关于c - 是否需要检查没有 malloc() 声明的 C 数组的有效性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28666160/