Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » std::bad_alloc ?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ] [ 4 ] [ 5 ]
000
05.09.2006, 16:23 Uhr
flappinski



Hallo habe ein neues Problem:
Seit ich ein neues Datenpaket analysiere, bekomme ich neuerdings folgende Fehlermeldung:


PHP 4:
terminate called after throwing an instance of 'std::bad_alloc'
  what():  St9bad_alloc
Aborted



nun sind diese Daten an Menge deutlich mehr als vorher und diese Fehlermeldung hat ja auch was mit Speichermangel zu tun. Nun wollte ich von Euch vielleicht erfahren, wo ich anfangen kann, zu suchen. Kommt das nur bei vektoren vor, oder auch bei Arrays (z.B. mit "new"). Ich definiere meine Arrays teilweise unsauber mit einem, wobei a, b, c KEINE Konstanten sind!


C++:
double var[a][b][c]



Habt Ihr Erfahrungswerte für obige Fehlermeldung und wie habt Ihr sie beseitigt?
Vielen Dank,
Stephan
Anmerkung: Der Hauptspeicher des Rechners kommt dabei NICHT an seine Grenzen und auch die Limits (hier vor allem stack-size) sind alle auf unlimited gesetzt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.09.2006, 19:37 Uhr
(un)wissender
Niveauwart


datenpacket?
ohne konstanten läuft das auch nicht
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.09.2006, 14:42 Uhr
flappinski



doch, g++ macht das auch mit variablen Variablen...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.09.2006, 16:39 Uhr
Blubber2063



Ja aber nur mit vorinialiserten Variablen, soweit ich mich nicht falsch erinnere, damit sind sie bereits zur Compilezeit festgelegt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.09.2006, 16:44 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


kompiliers mit -ansi -pedantic und -Wall dann siehste ob er da meckert weil die vars eben z.b nicht konstant sind
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
07.09.2006, 11:26 Uhr
flappinski



aber holla, jetzt habe ich jede Menge folgender Fehlermeldungen. Ich werde mich erst mal darum kümmern, aber ich habe den leisen Verdacht, dass das nicht das Problem lösen wird, denn das Programm wirft die Fehlermeldung <std::bad_alloc> nicht bei der Variablendeklaration aus, sondern irgendwann, wenn das Programm schon längst läuft....
Aber vielen Dank schon mal....


NTurn.cpp:164: error: ISO C++ forbids variable-size array
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
07.09.2006, 11:36 Uhr
flappinski



Nur noch mal zur Sicherheit:
Ich ersetze jetzt einfach:

string out_lines[spanz];


durch

string *out_lines;
out_lines = new string [spanz];

und die Warnmeldung beim Kompilieren verschwindet. Ist es das, was mein Compiler eigentlich automatisch macht? Das sollte doch wahrscheinlich mein ursprüngliches Problem nicht lösen, aber ich melde mich, wenn ich alle gelöst habe...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
07.09.2006, 11:39 Uhr
Blubber2063



Es würde mich auch schwer wundern, wenn das bei den Variablen käme, das ist ne Exception die z.B. von new geschmissen wird, wenn was fehlschlägt. Bzw. irgend einer anderen speicherallozierenden Funktion/Methode. Du solltest mal debuggen und die Fehlerzeile anschauen, bzw. um deine Speicheranforderungen einen try catch block machen und rausfinden wo es hackt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
07.09.2006, 13:16 Uhr
flappinski



Hi Blubber,
hier wird es interessant. Ich habe nur damit leider nicht so viel Erfahrung. Da mein Programm schon etwas länger ist, ist das debuggen nicht mehr so einfach, vor allem da dieses problem erst nach ca. 20 min. Laufzeit auftritt.
Gibt es denn eine Möglichkeit, den Programmteil, in dem ich sicher bin, dass die Speicherallozierung stattfindet, in einen try catch block fasse und mir danach die Zeile ausgeben lasse, in der das Problem aufgetreten ist?
Vielen Dank,
Stephan
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
07.09.2006, 13:22 Uhr
Blubber2063



Also dein Compiler ersetzt das nie durch new, entweder die Variable ist gobal, dann wird sie im Datensegment des Programms abgelegt, oder sie ist local, dann wird sie auf dem Stack abgelegt. Speicher der mit new alloziert wird liegt auf dem Heap.

Ein bad::alloc ist kein Runtime Error sondern eine Exception die du nicht abgefangen hast. D.h. wenn du um alle Speicher allozierenden Befehle einen try catch Block, machst in der du die Zeilennummer ausgibst solltest du direkt darauf stoßen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ] [ 4 ] [ 5 ]     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: