Klasy i macierze
Ostatnio zmodyfikowano 2019-04-04 07:32
tomekrx Temat założony przez niniejszego użytkownika |
Klasy i macierze » 2019-04-03 23:59:49 Witam, mam do zrobienia zadanie, które w klasie private zawiera podwojny wskaznik na tablice oraz rozmiar tablicy, public ktory ma konstruktor w ktorym przydzielam dynamicznie pamiec na tablice 3x3, destruktor oraz funkcje ktora wczytuje dane macierzy i funkcje ktora je wypisuje, ale jakoś nie chce działać. class Macierz { private: int rozmiar; float ** tab = new float *[ rozmiar ]; public: Macierz() { rozmiar = 3; * tab = new float[ rozmiar ]; tab[ rozmiar ][ rozmiar ]; } void wczytaj_dane() { cout << "Wprowadz dane do tablicy 3x3:"; float x; for( int i = 0; i < 3; i++ ) { for( int j = 0; j < 3; j++ ) { tab[ i ][ j ] = x; } } } void wypisz() { for( int i = 0; i < 3; i++ ) { for( int j = 0; j < 3; j++ ) { tab[ i ][ j ] = i * 3 + j; cout << tab[ i ][ j ] << " "; } } } ~Macierz() { delete[] tab; } }; int main() { Macierz m1; m1.wczytaj_dane(); m1.wypisz(); }
|
|
pekfos |
» 2019-04-04 00:13:02 Tablica dwuwymiarowa NxM to N+1 alokacji pamięci. Masz dwie i sprzątasz tylko po jednej z nich. |
|
tomekrx Temat założony przez niniejszego użytkownika |
» 2019-04-04 00:23:09 W sensie, wpisuje 4 cyfry (nie wiem czemu nie 3) po czym mi wywala konsole i wyskakuje: Nieobsłużony wyjątek w lokalizacji 0x00972AE7 w ConsoleApplication27.exe: 0xC0000005: Naruszenie zasad dostępu podczas zapisywania w lokalizacji 0xDDDDDDDD. |
|
pekfos |
» 2019-04-04 07:32:34 Żeby mieć tablicę dwuwymiarową, najpierw musisz utworzyć tablicę wskaźników i potem każdy wskaźnik musi wskazywać na poprawny obszar pamięci. Ty przypisujesz cokolwiek tylko do pierwszego wskaźnika, reszta jest niezainicjalizowana. |
|
« 1 » |