rätselhaftester bug ever
-
Hallo zusammen,
folgender bug bringt mich gerade an den Rand der Verzweiflung:Der Programmabschnitt
typedef double t_in; size_t size = 5225; try { t_in* eta_lut_in = new t_in[size]; cout<<size<<'\t'<<eta_lut_in<<endl; for (size_t i=0; i<size; ++i) { eta_lut_in[i] = 1; } delete[] eta_lut_in; } catch (bad_alloc& ba) { cerr << "bad_alloc caught: " << ba.what() << endl; }bringt mein Programm an einer ganz anderen Stelle zum Absturz:
[sol2:08466] *** Process received signal ***
[sol2:08466] Signal: Segmentation fault (11)
[sol2:08466] Signal code: (128)
[sol2:08466] Failing at address: (nil)
[sol2:08466] [ 0] /lib/libpthread.so.0 [0x7f897dc04a80]
...Und das beste: initialisier ich stattdessen eta_lut_in[i] mit 0 klappt alles problemlos.

Hat jemand ne Idee woran das liegen könnte?
Hab ich gerade nen riesen Brett vor dem Kopf?
-
Mein Vorschlag:
Bei der Verarbeitung eines C-Strings wird auf Speicher zugegriffen, der nicht zum String gehört. Dabei wird der (ehemalige?) Bereich von eta_lut_in erwischt. Steht dort 0, ist der Sting zu ende. Ansonsten wird weiter gelesen, bis ungültiger Speicher erreicht wird.
Lars
-
Segmentation fault ist ein typischer Fehler, wo man stundenlang auf den Code gucken kann ohne was zu sehen, aber mit einem Debugger findet man den Fehler in Minuten.
-
Kannst du mal verschiedene Stellen im Code rausmachen, z.B. delete[] oder catch() oder cout << oder so was und schauen, ob du den Fehler genauer lokalisieren kannst?