Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C] Problem z tablicami dwuwymiarowymi i funkcją

Ostatnio zmodyfikowano 2012-02-07 00:29
Autor Wiadomość
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 ===|
P-50230
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.
P-50231
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ń.
P-50233
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:
C/C++
void funkcja( int ** tablica )
{
    //1. jakich wymiarów jest tablica?
    //2. czy to aby na pewno jest 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).
P-50235
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ć?
P-50236
DejaVu
» 2012-02-07 00:29:42
C/C++
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;
}
P-50237
1 « 2 »
Poprzednia strona Strona 2 z 2