gpt4 book ai didi

c - 是否需要检查没有 malloc() 声明的 C 数组的有效性?

转载 作者:行者123 更新时间:2023-12-04 10:13:29 29 4
gpt4 key购买 nike

(如果有人有建议,我会改写标题,我知道这有点尴尬。)

在 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com