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';