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


  • Mod

    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?


Anmelden zum Antworten