gpt4 book ai didi

c - malloc 在 do while block 中

转载 作者:太空宇宙 更新时间:2023-11-04 00:25:52 26 4
gpt4 key购买 nike

我可以将 malloc 放在 do...while block 中以确保成功分配吗?

喜欢:

#define STR_SIZE 1024 * 1024
char *str;
do
str = (char *) malloc(STR_SIZE);
while ( !str );

最佳答案

它可能行不通,因为 malloc 很少失败,它会在资源耗尽时失败,而且这些不会很快可用。

malloc 可以获得更多资源的唯一常见情况是其他一些大进程释放了大量内存,这种情况很少发生,也可能永远不会发生;如果您关心这一点,请在循环中至少添加一个 sleep,并准备好处理 malloc 真正失败并始终返回 NULL 的情况.

更好的做法是测试 malloc 结果并退出并显示失败和错误消息,例如

  char* str = malloc(STR_SIZE);
if (!str) {
perror("malloc failed for str");
exit (EXIT_FAILURE);
}

并且每个程序都应该处理 malloc 失败的情况(通常通过退出并显示错误消息)。

很多程序调用xmalloc一个函数,当malloc 失败,成功返回分配的zone

明智地处理 malloc 失败(即做一些能够继续执行的事情)真的很难。例如,某些程序可能会释放 一些其他全局数据。实际上这相当于实现一些专门的 garbage collection机制。一些服务器可能只是让当前请求失败(并且应该非常小心地做到这一点,释放当前失败请求使用的所有资源)。

当您需要比可用资源更多的资源时,malloc 确实会失败。所以你必须处理这种情况。

顺便说一句,你可以考虑使用 Boehm's conservative garbage collector并使用 GC_malloc 而不是 malloc 并且不关心它的失败和 free-ing。 (我认为 Boehm 的 GC 会在内存不足时中止程序)。

关于c - malloc 在 do while block 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14180577/

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