Lista 2wymiarowa w C++

0

Witam

Mam 2 pytania.

  1. dlaczego instrukcja ((((i*M)) + j)) = 69; jest błędna ?? ponieważ 2krotnie dokonuje wyłuskanie..
  2. Czy destruktor jest dobrze zrobiony ??
 
//Program dynamicznie tworzy macierz dwu wymiarową, gdzie M to ilość wierszy, a N ilość kolumn
#include <iostream>
using namespace std;

class Macierz
{
    int **iloscWierszy;
    int M, N;
public :
    Macierz(int M , int N);
    void wypiszMacierz();
    ~Macierz();
};


Macierz::~Macierz()
{
    for(int i = 0; i < M; ++i)
    {
        delete[] iloscWierszy[i];
    }
    delete[] iloscWierszy;
}



void Macierz::wypiszMacierz()
{
    for(int i = 0; i < M; ++i)
    {
        for(int j = 0; j < N; ++j)
        {
            cout << iloscWierszy[i][j] << "  ";
        }
        cout << endl;
    }
}

Macierz::Macierz(int M = 0, int N = 0)
{
    this->M = M;
    this->N = N;
    iloscWierszy = new int*[M];
    for(int i = 0; i < M; ++i)
    {
        *(iloscWierszy + i) = new int[N];
    }
    // zerownaie macierzy
    for(int i = 0; i < M; ++i)
    {
        for(int j = 0; j < N; ++j)
        {
            iloscWierszy[i][j] = 69;
            //(*((*(i*M)) + j)) = 69;
        }
    }
}


int main()
{
Macierz m(3,3);
    m.wypiszMacierz();


return 0;
}

Dziękuje z góry za pomoc :)
Adam

0

*(iloscWierszy + i) = new int[N];

a dlaczego nie

iloscWierszy[i] = new int[N];

?

0

Destruktor jest dobry. Błąd polega na tym że i*M jest liczbą na której próbujesz zastosować wyłuskania tak jak by był to wskaźnik.

1 użytkowników online, w tym zalogowanych: 0, gości: 1