在 realloc() 之前是否需要 malloc()?

发布于 2024-10-08 09:05:58 字数 151 浏览 6 评论 0原文

因为我已经读到,如果指向的大小为 0,realloc 将充当 malloc,所以我在没有 malloc() 的情况下使用它,前提是指针是静态的、全局的,或者如果是自动的,则显式设置为 NULL。

然而,我注意到很多程序员尝试设置它或将其设置为 malloc(1)。需要吗?

Since I had read realloc will act as malloc if the size pointed is 0, I was using it without malloc(), provided the pointer was static, global, or explicitly set to NULL if automatic.

However, I notice a lot of programmers try to set it or set it to malloc(1). Is it needed?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

遮云壑 2024-10-15 09:05:58

来自Open Groups 规范

如果 ptr 是空指针,则 realloc()
应相当于 malloc()
指定的尺寸。

如果 ptr 与指针不匹配
之前由 calloc() 返回,
malloc() 或 realloc() 或如果空间
之前已被释放
调用 free() 或 realloc(),
行为未定义。

From Open Groups' specifications:

If ptr is a null pointer, realloc()
shall be equivalent to malloc() for
the specified size.

If ptr does not match a pointer
returned earlier by calloc(),
malloc(), or realloc() or if the space
has previously been deallocated by a
call to free() or realloc(), the
behavior is undefined.

躲猫猫 2024-10-15 09:05:58

malloc 不是必需的,您可以仅使用 realloc

malloc(n) 相当于 realloc(NULL, n)

然而,使用 malloc 而不是 realloc 的特殊语义通常更清晰。问题不在于什么有效,而在于不让阅读代码的人感到困惑。

(编辑:删除了 realloc 充当 free 的提及,因为它不是标准 C。请参阅评论。)

malloc is not required, you can use realloc only.

malloc(n) is equivalent to realloc(NULL, n).

However, it is often clearer to use malloc instead of special semantics of realloc. It's not a matter of what works, but not confusing people reading the code.

(Edit: removed mention of realloc acting as free, since it's not standard C. See comments.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文