[C] Problem z tablicami dwuwymiarowymi i funkcją
Ostatnio zmodyfikowano 2012-02-07 00:29
Matti Temat założony przez niniejszego użytkownika |
» 2012-02-06 23:41:40 C:\Users\Matti\programowanie\mnozenie_macierzy.c||In function 'main':|
C:\Users\Matti\programowanie\mnozenie_macierzy.c|69|warning: passing argument 1 of 'ZerowanieMacierzy' from incompatible pointer type|
C:\Users\Matti\programowanie\mnozenie_macierzy.c|3|note: expected 'int **' but argument is of type 'int (*)[(unsigned int)(y2)]'|
C:\Users\Matti\programowanie\mnozenie_macierzy.c|73|warning: passing argument 1 of 'MnozenieMacierzy' from incompatible pointer type|
C:\Users\Matti\programowanie\mnozenie_macierzy.c|12|note: expected 'int **' but argument is of type 'int (*)[(unsigned int)(y1)]'|
C:\Users\Matti\programowanie\mnozenie_macierzy.c|73|warning: passing argument 2 of 'MnozenieMacierzy' from incompatible pointer type|
C:\Users\Matti\programowanie\mnozenie_macierzy.c|12|note: expected 'int **' but argument is of type 'int (*)[(unsigned int)(y2)]'|
C:\Users\Matti\programowanie\mnozenie_macierzy.c|73|warning: passing argument 7 of 'MnozenieMacierzy' from incompatible pointer type|
C:\Users\Matti\programowanie\mnozenie_macierzy.c|12|note: expected 'int **' but argument is of type 'int (*)[(unsigned int)(y2)]'|
||=== Build finished: 0 errors, 4 warnings ===|
|
|
DejaVu |
» 2012-02-06 23:49:39 Chciałbym zauważyć, że to są ostrzeżenia, a nie błędy. Ostrzeżenia dostajesz, ponieważ z tablicy dwuwymiarowej o określonych wymiarach robisz tablicę dwuwymiarową o nieokreślonych wymiarach przez co inaczej są wykonywane przeliczenia adresów. |
|
Matti Temat założony przez niniejszego użytkownika |
» 2012-02-07 00:01:23 Program dochodzi do zerowania macierzy i wyrzuca błąd. Czyli nie mogę zlekceważyć ostrzeżeń. |
|
DejaVu |
» 2012-02-07 00:09:20 Napisałem Ci dlaczego się program wywala - źle przekazujesz tablice dwuwymiarowe do funkcji to raz (to da się jeszcze obejść), a dwa źle z niej korzystasz. Najprościej rzecz ujmując:
void funkcja( int ** tablica ) { }
Po przekazaniu 'czegoś' do funkcji jako wskaźnik, kompilator nie wie nic więcej niż to, gdzie się znajduje początek danych. W związku z powyższym zapis tablica[ x ] wewnątrz powyższej funkcji jest już nieprawidłowy, ponieważ nie wiadomo ile elementów znajduje się w pierwszym wymiarze tablicy (o ile w ogóle tablica została przekazana do funkcji). |
|
Matti Temat założony przez niniejszego użytkownika |
» 2012-02-07 00:25:34 Poczytałem o tym trochę i widzę, że nie ma prostego sposobu przekazania takiej tablicy, której wymiarów nie znam. Eh. Jakieś proste rozwiązanie możesz mi zasugerować? |
|
DejaVu |
» 2012-02-07 00:29:42 void zeruj( int * t, int a, int b ) { for( int x = 0; x < a; ++x ) for( int y = 0; y < b; ++y ) t[ a * y + x ] = 0; } int main() { zeruj( reinterpret_cast < int *>( tablica ), rozmiarX, rozmiarY ); return 0; } |
|
1 « 2 » |