Como posso imprimir algo quando não tenho memória?
Tenho um conjunto personalizado de funções malloc[, realloc e calloc] e free. Por enquanto, o projeto apenas as usa como um wrapper para as versões normais das funções. Essas funções wrapper encerram o programa e devem dar uma saída para indicar o erro.
No momento, a função para emitir a mensagem de erro se parece com isto:
#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
O problema é que printf()
às vezes aloca memória e se eu estiver sem memória, isso falhará. Aloca fwrite()
memória? E se sim, há uma opção portátil (então sem chamada de sistema de gravação) para produzir algo sem ter que alocar mais memória?
Até agora, como solução funcional para sistemas Unix, eu poderia fazer isso:
#ifdef __unix__
#define write_str_no_alloc(str) write(STDERR_FILENO, str, sizeof(str))
#else
#define write_str_no_alloc(str) ???
#endif
Estou sentindo falta de uma solução para janelas. Eu preferiria uma solução geral para ambos, mas isso funcionaria para mim.