内存不足时如何输出内容?
我有一组自定义的 malloc[、realloc 和 calloc] 和 free 函数。 目前该项目仅使用它们作为普通版本函数的包装器。这些包装函数终止程序,并应给出一个输出来指示错误。
目前输出错误消息的函数如下所示:
#ifdef __linux__
void memory_error() {
if (errno == ENOMEM)
printf("%s\n", "Out of memory or memory is limited. Fatal error. The program needs to terminate.");
else
printf("%s\n", "Memory allocation failed. Fatal error. The program needs to terminate.");
}
#else
void memory_error() {
printf("%s\n", "Memory allocation failed, likely due to being out of "
"memory or memory being limited for this program. "
"Fatal error. The program needs to terminate.");
}
#endif
问题是
printf()
有时会分配内存,如果我内存不足,就会失败。 fwrite()
分配内存吗?如果是这样,是否有一个可移植(因此无需写入系统调用)选项可以输出某些内容而无需分配更多内存?
到目前为止,作为 UNIX 系统的可行解决方案,我可以这样做:
#ifdef __unix__
#define write_str_no_alloc(str) write(STDERR_FILENO, str, sizeof(str))
#else
#define write_str_no_alloc(str) ???
#endif
我缺少 Windows 的解决方案。我更喜欢两者的通用解决方案,但这对我有用。
Windows 有一个
_write
函数,它是 POSIX 兼容层的一部分。 所以你可以这样做:
#ifdef _MSC_VER
#include <io.h>
#define write_str_no_alloc(str) _write(STDERR_FILENO, str, sizeof(str))
#else
#define write_str_no_alloc(str) write(STDERR_FILENO, str, sizeof(str))
#endif