calloc に依存するコードを書いていますが、calloc が失敗した場合はポインタをスタック領域に再ポイントし、free() を呼び出す前にポインタを NULL に設定するか、完全にスキップしても安全ではないかと考えていました。私の 386 Linux ボックスでうまく動作します。
char *str = NULL;
int usestackspace = 0;
char str1[16] = {0};
str = (char *)calloc(1, sizeof(pid_t));
if (str == NULL) {
sleep(1);
str = (char *)calloc(1, sizeof(pid_t));
}
if (str == NULL) {
fprintf(stderr, "watchdog: %s\n", strerror(errno));
usestackspace = 1;
str = str1;
}
if (str == NULL) {
return -1;
}