Например, Мне нужно malloc две части памяти, поэтому:
void *a = malloc (1);
if (!a)
return -1;
void *b = malloc (1);
if (!b)
{
free (a);
return -1;
}
Обратите внимание, если второй malloc терпит неудачу, я должен сначала освободить "a". Проблема в том, что это может быть очень грязно, если таких проверок malloc и ошибок достаточно, если я не использую пресловутое предложение "goto" и аккуратно упорядочиваю порядок свободных вместе с метками:
void *a = malloc (1);
if (!a)
goto X;
void *b = malloc (1);
if (!b)
goto Y;
return 0; //normal exit
Y:
free (a);
X:
return -1;
Есть ли у вас лучшее решение этой ситуации? Спасибо заранее.