Hallo ihr,
es wird einem ja stets mit auf den Weg gegeben, nach jeder Benutzung von malloc zu prüfen, ob man überhaupt Speicher reserviert bekommen hat, bevor man irgendwie weitermacht. Nun hätte ich es gerne so, dass sich das Programm mit einer Fehlermeldung beendet, wenn malloc fehlschlägt. Bis jetzt habe ich das immer so gemacht, dass ich bei einem Fehlschlag von malloc NULL oder 0 als return-Wert der jeweiligen Funktion zurückgegeben habe, die Funktion darüber hat das dann auch gemacht und dann wieder [...] und irgendwann ist man bei der main und kann die mit return 0 beenden. Bloß wird diese Methode sehr nervig, je längere Funktionsketten man hat, außerdem gibt es Probleme mit int/double Funktionen, die auch von sich aus alle möglichen Werte zurückgeben können (dann kann man keinen speziellen auswählen, der jetzt einen malloc-Fehlschlag darstellt). Deshalb die Frage:
Gibt es eine Möglichkeit, aus einer Funktion heraus nicht nur die aktuelle Funktion, sondern das komplette Programm zu beenden? Wenn nein, wie kann man obiges Problem mit malloc ansonsten vernünftig lösen?
MfG plizzz
Zuletzt bearbeitet von plizzz am 10:12:29 08.03.2010, insgesamt 1-mal bearbeitet
Gut, das ist das C-Forum, hab ich nicht bedacht (deine niveaulosen Beleidigungen kannst du dir natürlich trotzdem sparen). Für den Fall, dass der MS-Compiler verwendet wird, gibt es allerdings immerhin die Exception-Erweiterung für C (__try, __except, __finally).
_________________ Wie viele atheistische Babys hat man schon aus Versehen - oder gar mit Absicht! - getauft?
Gut, das ist das C-Forum, hab ich nicht bedacht (deine niveaulosen Beleidigungen kannst du dir natürlich trotzdem sparen). Für den Fall, dass der MS-Compiler verwendet wird, gibt es allerdings immerhin die Exception-Erweiterung für C (__try, __except, __finally).
__try, __except und __finally haben haben rein garnichts mit der Frage von plizz zu tun. Warum schreibst du hier wenn du keine Ahnung hast?
Ganz ruhig. Mir ist zwar durchaus bewusst, dass die Frage nach der richtigen malloc-Lösung enormes Konfliktpotenzial in sich trägt, ich wollte aber dennoch keinen Privatkrieg damit auslösen.
Zum obigen Code: Im Endeffekt läuft es da wohl auf die Benutzung von exit() hinaus, was das Programm scheinbar schließt. Das riecht allerdings nach einer Lösung, bei der das halbe Forum hier wild schreiend die Fackel anzünden würde, da es wohl irgendwelche Nebenwirkungen gibt a la "vorher allokierter Speicher wird nicht freigegeben". Oder ist diese exit-Variante eher unproblematisch und man kann sie guten Gewissens verwenden?
BiG Brazz0r
Unregistrierter
BiG Brazz0r Unregistrierter
11:48:35 08.03.2010 Titel:
Oder ist diese exit-Variante eher unproblematisch und man kann sie guten Gewissens verwenden?
Windows gibt allen Speicher frei wenn das Programm beendet wird.
Von Windows war hier übrigens nie die Rede. Willst du dich wirklich darauf verlassen, dass jedes in Frage kommende Betriebssystem unter allen Umständen alle Speicherleichen eines beendeten Prozesses freimacht? Das ist einfach schlechter Stil. Wer Speicher anfordert, sollte diesen auch wieder freigeben. Zumal eine Rückgabe NULL von malloc nicht unbedingt bedeuten muss, dass man sein Programm komplett beenden will (auch, wenn plizzz es in diesem Fall so machen will; vielleicht entscheidet er später auch mal anders)...
_________________ Wie viele atheistische Babys hat man schon aus Versehen - oder gar mit Absicht! - getauft?
Nächstes Thema anzeigen Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums
für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de
Werbekostenerstattung verdient werden kann.
Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de
enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt
(vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in
privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden.
Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere
übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.