C - Allozierung das Problem?

HentaiD

Mitglied
Nachdem mein Programm endlich funktionierte und ich die Speicherallozierung angepasst habe, funktioniert der Code, warum auch immer, nicht mehr.
Problem ist offenbar, laut Debugger, die Variable passBr.
Diese (passBr[x][i][0], passBr[x][i][1]) gibt beim printen immer nur 2 Werte aus und das Programm stürzt dann ab, wobei x in diesem Fall nicht entscheidend ist.
Code aufs Minimalste 'runtergebrochen (Zeilen sind immer größer 2):

Code:
   int ***passBr;                                                            

   
   void Alloz(){
      passBr = (int ***)malloc(Zeilen*sizeof(int **));  
      for(i=0;i<Zeilen;i++){
         passBr[i] = (int **)malloc(Zeilen*sizeof(int *));
      }
      for(i=0;i<Zeilen;i++){
         passBr[i][i] = (int *)malloc(2*sizeof(int));
      }
   }// Alloz ENDE


      for(i=0;i<Zeilen;i++){
         printf("%d, %d\n", passBr[0][i][0], passBr[0][i][1]);
      }

Wo soll denn da ein Fehler sein? Komischerweise "funktioniert":

Code:
      for(i=0;i<Zeilen;i++){
         printf("%d, %d\n", passBr[i][i][0], passBr[i][i][1]);
      }
wobei dort das Programm ab einem gewissen Punkt "anhält" und den Rest des Codes überspringt, aber nicht abstürzt. *vollkommen ratlos* :confused:

Liebe Grüße, D
 
Hallo,

du initialisierst im deinem Datenquader nur eine Diagonale.

d.h. alle Werte die mit identischem i den folgenden Werten entsprechen:
passBr[i][i][0] oder passBr[i][i][1]

Wenn du das ganze Feld allozieren willst musst du die Allozierung der zweiten Ebene mit in die geschweiften Klammern mit reinnehmen.


zum Beispiel:

Code:
   void Alloz(){
      passBr = (int ***)malloc(Zeilen*sizeof(int **));  
      for(i=0;i<Zeilen;i++){
         passBr[i] = (int **)malloc(Zeilen*sizeof(int *));

         for(j=0;j<Zeilen;j++){
            passBr[i][j] = (int *)malloc(2*sizeof(int));
            }
      }
   }// Alloz ENDE




MfG,
David Buchanan,
Buchanan Software GmbH
 
Zurück