gpt4 book ai didi

c - 记录内存分配错误

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

假设我正在尝试在 C99 中编写 malloc() 的检查版本 - 没什么特别的,一个简单的包装器,如果 malloc() 返回 NULL 将向 stderr 打印一条错误消息并退出。有点像

   void* checked_malloc(size_t size) {
void* ptr = malloc(size);
if (ptr == NULL) {
fprintf(stderr, "Failed to allocate %zd bytes\n", size);
exit(1);
}
return ptr;
}

其中一个问题是 fprintf - 它可能会尝试自行分配内存,并且由于我们已经用完了内存,所以会失败。

有什么方法可以在内存分配失败后可靠地记录错误消息?或者是否有更好的方法来编写已检查的 malloc()?与编译器无关的解决方案是非常受欢迎的。

最佳答案

说实话,我觉得你太偏执了。您当前的解决方案看起来不错。 fprintf() 没有理由因 ENOMEM 而失败。它只是转身并向 stderr (2) 的文件描述符发出 write() 调用。它没有理由分配任何内存。

当然,您始终可以尝试使用直接 write() 进行日志记录,如下所示:

static const char oom[] = "Out of memory!\n";
write(2, oom, sizeof(oom));

但同样,这可能有点矫枉过正。

此外,您不必担心每个库调用在内存分配方面的作用。使用经过检查的 malloc() 不能替代代码中其他地方的良好错误检查。

关于c - 记录内存分配错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15169941/

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