Probleme beim Übergeben von einem Array als Pointer



  • Hi

    Type

    typedef char arrayt[64][512];
    

    Auszug aus der Main

    .
    .
    .
    arrayt  b1, b2, b3;
    
          arrayt_a(&b1);
          arrayt_a(&b2);
          arrayt_a(&b3);
    .
    .
    .
    

    arrayt_a in einem anderen c File

    void arrayt_a (arrayt * b)
    {
      unsigned int
          x = 0
        , y = 0
    
        ;
    
      for (y = 0; y < 512; ++y)
        {
    
          for (x = 0; x < 64; ++x)
            {
    			*b[x][y]='a';
    
    		}
    	}
    }
    

    Nun bekomme ich schon beim ersten aufruf von arrayt_a eine Fehlermeldung

    4 [main] ueb04 2904 _cygtls::handle_exceptions: Error while dumping state
    (probably corrupted stack)
    Segmentation fault (core dumped)

    Nach dem er an der Stelle x=0 und y=20 das array beschrieben hat

    An einem anderen Rechenr war es an der Stelle x=2 und y=50.

    Ich versteh das nicht....seht ihr da ein Fehler ?

    Compiler ist gcc -ansi in CYGWIN

    Vielen Dank!



  • Hi Bruder!
    In der Parameterliste einer Funktion wird das Array zum Zeiger,
    kannst bei dir also die * und & weglassen:

    typedef char arrayt[64][512];
    
    void init ( arrayt at )
    {
    	int i, j;
    	for ( i=0; i<64; i++ )
    		for ( j=0; j<512; j++ )
    			at[i][j]=88;
    }
    
    void kuggi ( arrayt at )
    {
    	int i, j;
    	for ( i=0; i<64; i++ )
    		for ( j=0; j<512; j++ )
    			printf("at[%d][%d] = %d\n", i, j, at[i][j] );
    }
    
    int main()
    {
    	arrayt AT;
    	init (AT);
    	kuggi (AT);
    	return 0;
    }
    

    Gruß,
    B.B.



  • Hi

    macht leider kein unterschied, selbe stelle/selbe fehlermeldung

    Gruß



  • dann haste dir schon an einer anderen stelle vorher den stack zerschossen.



  • guggst du hier:

    typedef	char arrayt[64][512];
    
    void arrayt_a (arrayt *b){
    
    	u_int		x, y;
    
    	for (x = 0; x < 64; ++x){
    		for (y = 0; y < 512; ++y){
    			*((char *)b + x*512 + y) = 'a';
    		}
    	}
    //	*((char *)b + 63*512 + 511) = '\0';
    //	printf((char *)b)
    }
    
    void test(void){
    	arrayt		b1, b2, b3;	
    
    	arrayt_a(&b1);
    	arrayt_a(&b2);
    	arrayt_a(&b3);
    }
    


  • guggstdu schrieb:

    guggst du hier:
    ...

    wo ist da die steigerung? außer der, der schlechteren lesbarkeit gegenüber der indexbasierten variante?



  • gugg0r schrieb:

    wo ist da die steigerung?

    Mein Code läuft (wie immer). Nur darauf kommts an.



  • Moin,
    so fehler gefunden:

    Ich muss (*b)[x][y]='a'; schreiben und nicht *b[x][y]='a';


Anmelden zum Antworten