Probleme mit Wiederverwertung von dyn. Arrays in Schleife



  • Hallo,

    ich habe ein Problem mit der Wiederbenutzung dynamischer Arrays und denke, dass es daran liegt, dass ich das delete vielleicht nicht korrekt benutze. (Bin Frischling)

    Das Programm läuft in einer Schleife, in der sich ein Integer-Wert am Ende der Schleife ändert. Ich werde nicht meinen kompletten Quelltext dazu posten, sondern das nur mal hier zur Verdeutlichung anschneiden.

    int n;
    int **matrix;
    int *array;
    
    cin >> n;
    while ( n < x ){
      matrix = new int*[n];
      for(int i=0;i<n;i++){
        matrix[i] = new int[n];
      }
      array = new int[n];
    
      //Hier folgen Operationen auf und mit den Arrays wie z.B. Befüllen und Verändern
    
      for (int i =0;i<n;i++){
        delete[] matrix[i];
      }
      delete[] matrix;
      matrix = NULL;
      delete[] array;
      array = NULL;
    
      n++;
    }
    

    Das Problem ist nun, dass die Arrays (vor allem der zweidimensionale Array) scheinbar nicht mehr richtig addressiert wird. Denn kurz nachdem die Matrix erzeugt wurde, wird sie initialisiert. Das passiert natürlich auch bei dem nachfolgenen Durchlauf der Schleife. Wenn ich dann aber den Inhalt der Matrix ausgebe, sind nicht alle Werte so, wie in der Initialiserung angegeben. Das funktioniert nur beim allerersten Schleifendurchlauf.

    Mache ich hier irgendwas total verkehrt?

    Vielen Dank und Gruß



  • seh kein fehler, wenn dann ist da einer beim schreiben.
    wieso nimmst du nicht std::vector?



  • Wenn du dynamisch allokierst, ist es am besten, wenn du std::vector< std::vector<T> > nimmst. Vergiss dann aber nicht vector.reserve(size_t).
    Alternativ und wenn du die Größe irgendwann zur Laufzeit eindeutig determinieren kannst, liefert dir das Boost-Project gute Lösungen:
    http://www.boost.org/doc/libs/1_35_0/doc/html/array.html
    http://www.boost.org/doc/libs/1_35_0/libs/multi_array/doc/index.html
    Das new[]-Kommando ist einfach zu fehleranfällig.

    mfg, Hans
    :schland: ➡ 🙂



  • torstenschmitz schrieb:

    Wenn ich dann aber den Inhalt der Matrix ausgebe, sind nicht alle Werte so, wie in der Initialiserung angegeben. Das funktioniert nur beim allerersten Schleifendurchlauf.

    Zeig mal bitte relevanten Code, wo es deiner Meinung nach nicht richtig funktioniert.
    Der gezeigte Code bringt so jetzt nicht viel.


Log in to reply