Hilfe bei zweidimensionalem Feld. Bin am verzweifeln



  • Hallo,

    ich hab schon lange gesucht, aber irgendwas mach ich noch falsch. Könnt ihr euch das bitte mal ansehen !! und mir sagen wo der fehler liegt. Ich brauch ein zweidimensionales Feld
    angelegt im Header so:

    float **fArrayData;
    

    jetzt soll es dynamisch seine Größe bekommen:

    fArrayData = new float *[iAnzZeilen];
    for(int i = 0; i<= iAnzZeilen; i++)
    {
      fArrayData[i] = new float [6];
    }
    

    in meinem Beispiel ist iAnzZeile = 116 (in den Zeilen 1 bis einschl. 115 steht was drin.

    So und löschen muss ich das ganze ja auch wieder und das hab ich so:

    if(fArrayData != NULL)
    {
    	delete [] fArrayData;
    	fArrayData = NULL;
    }
    

    aber irgendwie scheint das nich hinzuhauen. Bitte um Hilfe. 🙄



  • jedes new [] braucht sein delete[].
    Du musst also noch für die n-elemente des Pointerarrays delete[] aufrufen.

    Devil



  • wie müßte das dann aussehen?
    etwa so:

    if(fArrayData != NULL)
    {
      for(int i = 0; i<= iAnzZeilen; i++)
      {
        delete [] fArrayData;
      }
    
        delete [] fArrayData;
        fArrayData = NULL;
    }
    

    😕



  • ela schrieb:

    jetzt soll es dynamisch seine Größe bekommen:

    fArrayData = new float *[iAnzZeilen];
    for(int i = 0; i<= iAnzZeilen; i++)
    {
      fArrayData[i] = new float [6];
    }
    

    Aufpassen! Du schreibst über den Speicher raus. "i < iAnzZeilen". Ist nötig.

    Beim löschen, soweit ich mich erinnere, müsste es so gehen:

    if(fArrayData != NULL)
    {
      for(int i = 0; i < iAnzZeilen; i++)
      {
        delete [] fArrayData[i];
      }
    
        delete [] fArrayData;
        fArrayData = NULL;
    }
    

    Kritik wird gern entgegengenommen.

    Schöne Grüße vom Kauz01



  • Hallo,

    ja mit dem Speicher das war mein Fehler, aber das löschen geht leider noch nicht.
    Ich bekomm folgende Fehlermeldung:

    Unhandled exception at 0x77f65a58 in LIPAS.exe: User breakpoint.

    in der For-Schleife. Ich hab auc schon hinund her probiert, aber es funzt nicht.



  • vielleicht schreibst du mehr als 6 floats hinein?



  • Hast du das "<=" gegen ein "<" getauscht?

    Grüße vom Kauz01



  • Hallo,

    @Kauz01: ja hab ich gändert.

    @Horst2: naja, ich hab 7 Werte und wen ich als Dimension 6 angebe, müßten es eigentlich 7 Werte sein, weil ja von 0 bis 6 aber ich glaub du hattest den Daumen drauf. Ich hab die Initialisierung auf 7 geändert und da scheint das zumindest erstmal zu gehen.

    Danke ich werd mal weiter schauen.



  • NEIN, nicht 0..6 bei [6]! ⚠

    Die Zahl in Klammern ist die ANZAHL, nicht die Obergrenze.



  • estartu_de schrieb:

    NEIN, nicht 0..6 bei [6]! ⚠

    Die Zahl in Klammern ist die ANZAHL, nicht die Obergrenze.

    So ist es !!! 🙄

    ⚠ AUFPASSEN

    Beim initialisieren ist die Zahl in Klammern ([]) immer die Anzahl.
    Schreiben und Lesen darf man in dem Array nur von 0 bis Anzahl-1 !!!



  • Danke, da hat ich wohl einen ziemlich Denkfehler.
    Kein wunder das das nicht geht, da muss ich die anderen angaben auchnochmal überprüfen, den irgendwo is immer noch ein Wurm drin. 👍


Anmelden zum Antworten