私がmalloc()
C99でのチェックバージョンを書き込もうとしているとしましょう-何も派手ではなく、単純なラッパーで、malloc()
returnsNULL
がエラーメッセージを出力し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;
}
これに伴う問題の1つは、fprintfです。これは、それ自体でメモリを割り当てようとする可能性があり、メモリが不足しているため、すでに正常に失敗します。
メモリ割り当てに失敗した後、エラーメッセージを確実にログに記録する方法はありますか?または、チェック済みの書き込みを行うためのより良いアプローチはありますmalloc()
か?コンパイラにとらわれないソリューションが非常に好まれます。