假设我正在尝试malloc()
在 C99 中编写一个检查版本 - 没什么花哨的,一个简单的包装器,如果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()
?编译器不可知的解决方案是非常受欢迎的。