Array Seg Fault



  • Hallo,
    ich versuche gerade ein Array zu "spiegeln".
    Das Array "array" wird initialisiert. Dann soll die erste Zeile von "flip" mit der letzten Zeile von "array" initialisiert werden. Die zweite Zeile von "flip" soll die vorletzte von "array" sein. Usw.

    Mein Lösungsversuch sieht wie folgt aus:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main ()
    {
      //Speicher für Array anlegen. 
      unsigned char **array;
      int i,j;
      array = malloc(4 * (sizeof(char*)));
      for(i = 0; i < 4; i++)
      {
        array[i] = malloc(3 * (sizeof(char)));
      }
    
      //Array initialisieren.
      int zahl = 0;
      for(i = 0; i < 4; i++) 
      { 
        for(j = 0; j < 3; j++) 
    	{ 
    	  array[i][j] = zahl;
    	  zahl++;
    	} 
      }
    
      //Speicher für zweites Array Flip anlegen.
      unsigned char **flip;
      flip = malloc(4 * (sizeof(char*)));
      for(i = 0; i < 4; i++)
      {
        flip[i] = malloc(3 * (sizeof(char)));
      }
    
      //Flip initialisieren.
      int x,y = 0;
      for(i = 4 - 1; i > 0; i--)
      {
        for(j = 0; j < 3; j++)
    	{
    	  flip[x][y] = array[i][j];
    	  y++;
    	}
    	x++;
    	y = 0;
      }
    
      //Ausgabe von Array und Flip.
      for(i = 0; i < 4; i++) 
      { 
        for(j = 0; j < 3; j++) 
    	{ 
    	  printf("%d ", array[i][j]);
    	} 
    	printf("\n"); 
      }
    
      for(i = 0; i < 4; i++) 
      { 
        for(j = 0; j < 3; j++) 
    	{ 
    	  printf("%d ", flip[i][j]);
    	} 
    	printf("\n"); 
      }
    
      return 0;
    }
    

    Liefert allerdings einen Seg Fault. Sieht jemand warum?



  • Stück für Stück Code auskommentieren und gucken, wann es nicht mehr crasht. Dann weißt du, wo der Fehler ist.



  • x wird nirgends initialisiert zb



  • doch. zeile 35





  • ok, müsste int x=0, y=0; heißen, aber ob das das Problem ist....



  • ah ok. Danke dir.
    gut, damit gehts besser. Zwar noch nicht komplett was ich will. Aber das sollte mit ein bisschen spielen behoben werden können.

    ./a.out:
    0 1 2
    3 4 5
    6 7 8
    9 10 11
    9 10 11
    6 7 8
    3 4 5
    0 0 0



  • so, jetzt passt alles. Danke euch.


Anmelden zum Antworten