Wie Jens Gustedt in einem Kommentar erwähnt, zu der Zeit gibt einen Fehler zurück Ihr Programm ist wahrscheinlich in einem Haufen Probleme bereits. Macht es Sinn, einen Haufen Fehlerbehandlungscode einzubauen, um mit der Situation fertig zu werden, wenn das Programm wahrscheinlich ohnehin nicht viel tun kann? Für viele Programme ist die Antwort "Nein", für andere ist es sehr wichtig, etwas Passendes zu tun.
können Sie versuchen, Ihr Gedächtnis durch eine einfache ‚malloc-or-die‘ Wrapper-Funktion Zuweisung, die garantiert, dass die Zuweisung erfolgreich ist oder das Programm beenden:
void* m_malloc(size_t size)
{
void* p;
// make sure a size request of `0` doesn't trigger
// an error situation needlessly
if (size == 0) size = 1;
p = malloc(size);
if (!p) {
// attempt to log the error or whatever
abort();
}
return p;
}
Ein Problem, das man dann in laufen ist, dass Es gibt nicht viel, was du zuverlässig tun kannst, außer vielleicht das Programm zu beenden.Selbst wenn das Problem protokolliert wird, wird wahrscheinlich eine gewisse Speicherzuweisung erforderlich sein, so dass die Protokollierungseinrichtung wahrscheinlich ihre eigenen Probleme hat (es sei denn, Ihr Zuteilungsfehler beruht auf dem Versuch, einen unangemessen großen Speicherblock zuzuweisen).
Sie könnten versuchen, dieses Problem zu lösen, indem Sie früh in Ihrem Programm einen 'fehlersicheren' Block zuweisen, der freigegeben werden kann, wenn Sie das Problem protokollieren müssen (ich denke, es gibt einige Programme, die diese Strategie verwenden). Aber wie viel Arbeit Sie in diese Art der Fehlerbehandlung stecken, hängt von Ihren spezifischen Bedürfnissen ab. Wenn Ihr Programm sicherstellen muss, dass etwas von erheblicher Komplexität ausgeführt wird, wenn malloc()
einen Fehler zurückgibt, müssen Sie entsprechende Maßnahmen ergreifen, um sicherzustellen, dass Sie diese Dinge in einer Situation mit sehr wenig Arbeitsspeicher tun können. Im Allgemeinen bedeutet dies zusätzliche Komplexität, und es ist nicht immer die Mühe wert.
Aus diesem Grund sind Ausnahmen übrigens Fehlercodes weit überlegen. – GManNickG
Da gibt es viel wichtigere Dinge, die davor stehen: https://gustedt.wordpress.com/2011/11/05/chasing-a-phantom-checking-the-return-of-malloc/ –
Nur noch ein Stück Informationen: Der in der Frage erwähnte Code wurde von einem Microsoft MVP erstellt. – Victor