Предположим, что это часть моего кода:
int foo()
{
char *p, *q ;
if((p = malloc(BUFSIZ)) == NULL) {
return ERROR_CODE;
}
if((q = malloc(BUFSIZ)) == NULL) {
free(p)
return ERROR_CODE;
}
/* Do some other work... */
free(p);
free(q);
}
Поскольку возможно, что первая malloc
успешна, но вторая не удалась, я использую free(p)
во втором "обработчике ошибок". Но что, если есть больше malloc
, и что, если я хочу изменить код (корректируя их порядок, добавляя или удаляя некоторые malloc
)?
Я знаю, что в С++ есть такие вещи, как RAII и безопасные исключения, и т.д. Но в целом, как правильно обращаться с ошибкой malloc
в C? (возможно, используя некоторые goto
?)