Я пишу код, зависящий от calloc, и задавался вопросом, было бы безопасно переназначить указатель на пространство стека, если calloc не удалось, а затем установить указатель на NULL перед вызовом free() или вообще пропустить его. Прекрасно работает с моей 386-й линейкой.Является ли этот код непереносимым или небезопасным
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;
}
'free' и' str = NULL; 'бессмысленны, но в остальном он выглядит нормально. –
Вы не должны редактировать код в вопросе без каких-либо указаний на него. Я потратил несколько минут на поиски свободного, прежде чем осознать, что вы его не приняли. – cdietschrun
'return -1;' в редакции 4 вопроса - это мертвый код. Оптимизирующий компилятор может опустить третье «если» вообще. –