Как я могу правильно обработать сбой 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?)

Ответы на вопрос(6)

Ваш ответ на вопрос