Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Advanced Developers Conference     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: C (C89 und C99) ::  "Komfort" bei malloc  
Gehen Sie zu Seite 1, 2, 3, 4, 5, 6  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
plizzz
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.07.2009
Beiträge: 82
Beitrag plizzz Mitglied 10:10:27 08.03.2010   Titel:   "Komfort" bei malloc            Zitieren

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
collam
Unregistrierter




Beitrag collam Unregistrierter 10:22:00 08.03.2010   Titel:              Zitieren

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
 :cool:
void *malloc_x (size_t length)
{
   void *m = malloc (length);
   if (m == 0)
   {
      fprintf (stderr, "DAMN!!!");
      exit (1);
   }
   return m;
}
:cool:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
:cool:
void *malloc_x (size_t length)
{
void *m = malloc (length);
if (m == 0)
{
fprintf (stderr, "DAMN!!!");
exit (1);
}
return m;
}
:cool:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
 :cool:
void *malloc_x (size_t length)
{
   void *m = malloc (length);
   if (m == 0)
   {
      fprintf (stderr, "DAMN!!!");
      exit (1);
   }
   return m;
}
:cool:
_matze
Mitglied

Benutzerprofil
Anmeldungsdatum: 31.07.2007
Beiträge: 9274
Beitrag _matze Mitglied 10:23:15 08.03.2010   Titel:              Zitieren

Sieh dir vielleicht mal Exceptions an...

_________________
Wie viele atheistische Babys hat man schon aus Versehen - oder gar mit Absicht! - getauft?
collam
Unregistrierter




Beitrag collam Unregistrierter 10:24:27 08.03.2010   Titel:              Zitieren

_matze schrieb:
Sieh dir vielleicht mal Exceptions an...

Wir sind hir nicht bei Java du Spacken!
_matze
Mitglied

Benutzerprofil
Anmeldungsdatum: 31.07.2007
Beiträge: 9274
Beitrag _matze Mitglied 10:42:51 08.03.2010   Titel:              Zitieren

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?
collam
Unregistrierter




Beitrag collam Unregistrierter 10:57:53 08.03.2010   Titel:              Zitieren

_matze schrieb:
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? :mad:
plizzz
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.07.2009
Beiträge: 82
Beitrag plizzz Mitglied 11:39:32 08.03.2010   Titel:              Zitieren

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




Beitrag BiG Brazz0r Unregistrierter 11:48:35 08.03.2010   Titel:              Zitieren

Du kannst mit ruhiger Gewissheit davon ausgehen, dass diese Vorgehensweise Grütze ist.
MfG,
B.B.
collam
Unregistrierter




Beitrag collam Unregistrierter 11:58:37 08.03.2010   Titel:              Zitieren

plizzz schrieb:

Oder ist diese exit-Variante eher unproblematisch und man kann sie guten Gewissens verwenden?

:arrow: Windows gibt allen Speicher frei wenn das Programm beendet wird.
_matze
Mitglied

Benutzerprofil
Anmeldungsdatum: 31.07.2007
Beiträge: 9274
Beitrag _matze Mitglied 12:11:10 08.03.2010   Titel:              Zitieren

collam schrieb:
plizzz schrieb:

Oder ist diese exit-Variante eher unproblematisch und man kann sie guten Gewissens verwenden?

:arrow: 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)... :rolleyes:

_________________
Wie viele atheistische Babys hat man schon aus Versehen - oder gar mit Absicht! - getauft?
C/C++ Forum :: C (C89 und C99) ::  "Komfort" bei malloc  
Gehen Sie zu Seite 1, 2, 3, 4, 5, 6  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




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.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

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.