Wie kann ich Malloc-Fehler in C richtig behandeln, insbesondere wenn es mehr als einen Malloc gibt?

Angenommen, dies ist ein Teil meines Codes:

 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);  
 }

Seit es möglich ist, dass das erstemalloc ist erfolgreich, aber der zweite schlägt fehl, ich benutzefree(p) im zweiten "error handler". Aber was ist, wenn es mehrmalloc 's und was ist, wenn ich den Code ändern möchte (Ändern der Reihenfolge, Hinzufügen oder Löschen einigermalloc)?

Ich weiß, dass es in C ++ Dinge wie RAII und Ausnahmesafe usw. gibt. Aber im Allgemeinen, wie man mit @ richtig umgehmalloc Fehler in C? (vielleicht mit etwasgoto?)

Antworten auf die Frage(12)

Ihre Antwort auf die Frage