Tut fprintf verwenden Sie malloc() unter der Haube?

Ich soll eine minimale a-damn-malloc-nur-handler failed, schreibt einige Informationen in eine Datei (wahrscheinlich nur standard-Fehler). Ich würde es vorziehen, zu verwenden, fprintf() eher als schreiben(), aber dies wird nicht schlecht, wenn fprintf() selbst versucht malloc().

Gibt es eine Garantie, entweder in die C-standard, oder auch nur in der glibc, dass fprintf wird das nicht mehr tun?

WICHTIG!!!!!! In der HANDLER malloc Dinge, sicher zu bleiben, mit etwas, das Sie tun sollten: a) re-registrieren malloc-Handler (alle 4) standard b) machen Sie Ihre Sachen über die Protokollierung etc. c) die wirkliche Erinnerung, re/de/Zuteilung der Bedarf des Anrufers usw. d) die Wiederherstellung IHRER Handler-e), dann weiter, gut, mit exitting. Dies hat den Vorteil, dass Sie immer noch tun, was müssen Sie während der Bearbeitung und müssen sich keine Gedanken darüber, ob jeder von Ihnen ist mit malloc oder nicht. Ich habe Sie einmal gewesen, es zu tun. Datei ist zu langsam, ich war mit einem socket. 🙂
Nur zur Klarstellung, ich habe nicht wirklich registriert malloc-Handler. Ich habe einfach einige low-level-Funktionen, die Aufruf malloc(), wenn die Allokation fehlschlägt, möchte ich, dass die Funktion zum drucken eines log-Meldung.
Ah! Erstens, wie sind Sie in der Lage, um das Programm fortzusetzen, wenn malloc() gescheitert? Ich denke, der einzige Weg für Sie, um fortzufahren drucken Sie eine vordefinierte Nachricht in einen text und senden Sie es mit write(). In der Regel, Zuordnungsfehler in der heutigen software sind eher die Qualifikation als "call abort() auf allocation failure". Wenn dies ist für die Fehlersuche/Diagnose, der coredump wird Ihnen sagen, viel mehr als jede Fehlermeldung (es sei denn, Sie haben abgerissen, der Stapel, natürlich).
Das ist die genaue motivation meiner Frage: ich möchte zuverlässig erhalten eine Nachricht, bevor Sie verschwinden. Ich wollte wissen, ob ich verwenden könnte printf() für, dass, egal ob ich stick mit write().
So, Sie sollten sich auf das Schlimmste vorzubereiten - das ist printf() ist wahrscheinlich rufen malloc().

InformationsquelleAutor Adrian Ratnapala | 2011-07-19

Schreibe einen Kommentar