Как я могу правильно обработать сбой malloc в C, особенно когда есть более одного malloc?
Предположим, это часть моего кода:
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
)?
Я знаю, что в C ++ есть такие вещи, как RAII, безопасные исключения и т. Д. Но в целом, как правильно обращатьсяmalloc
неудача в C? (возможно, используя некоторыеgoto
?)