Zweidimensionales Feld und segmentation fault



  • Hallo Leuts,

    ich möchte ein 2d-Feld von integern allokieren um das nachher zu füllen.
    Das Feld soll [nSize][2] groß sein.
    Ich mach das so:

    int** anFeld    = (int**) new int[nSize];
          anFeld[0] = new int[nSize*2];
    
    // jetzt muss der Speicher noch tatsächlich allokiert werden
    for (int i=0; i<nSize; i++)
    {
        anFeld[i] = anFeld[0] + i * 2;
    }
    
    // bis hier alles OK - aber jetzt!
    for (int j=0; j<nSize; j++)
    {
        anFeld[j][0] = 0;    // seg fault ...  :confused: 
        anFeld[j][1] = 0;    // aber erst bei j==nSize-1 (alle vorhergehenden OK)
    }
    

    Diesen Speicherzugriffsfehler kann ich mir nicht erklären.
    Vielleicht kann mich einer von euch erleuchten?

    Gruß Mea



  • Hi

    dein Problem ist, dass du dein Feld vollkommen chaotisch anlegst. Wenn du ein Feld der groesse nxm anlegen willst, legst du zuerst ein n-dimensionales Feld von Feldern an. Davon initialisierst du jedes der Felder als m-dimensionales Feld.

    int **array = new int*[n];
    for(int i = 0; i < n; i++ )
    {
      array[i] = new int[m];
    }
    

    fertig. Willst du jetzt noch direkt Werte setzen kannst du das in der Schleife machen und zwar ganz normal mit array[i][j] = 42; oder so.



  • P.S.:

    Meaculpa schrieb:

    int** anFeld    = (int**) new int[nSize];
    

    die Sternchen besser an die Variable haengen, denn:

    int** bla, blubb;
    

    legt nicht, wie viele glauben, zwei int** an, sondern bla ist vom typ int**, blubb vom typ int, weil die Sternchen zur variable gehoeren. Wenn man sich das angewoehnt passieren da weniger Fehler.


Anmelden zum Antworten