Cum se aloca in mod dinamic matrice multi-dimensionale ?
Solutie:
Solutia consta in declararea unui pointer catre o matrice de pointeri, care va fi apoi initializata cu valorile necesare:
Code: Select all
// declarare:
BOOL **arr = new BOOL*[m_nCols];
// initializare:
for(int i = 0; i < m_nCols; i++)
arr[i] = new BOOL[m_nRows];
Code: Select all
for (int i = 0; i < m_nCols; i++)
for (int j = 0; j < m_nRows; j++)
arr[i][j] = FALSE;
In cazul in care matricea se declara folosind initial numarul de randuri, ordinea de acces va fi inversata: arr[y-dimension][x-dimension].
Avand in vedere ca matricea a fost declarata in mod dinamic folosind operatorul new, memoria ocupata de aceasta trebuie eliberata. Eliberarea se va face in ordinea inversa alocarii, folosindu-se operatorul delete[], deoarece eliberam sirurile de pointeri alocati initial:
Code: Select all
for(int i=0; i < m_nCols; i++)
delete [] arr[i];
delete [] arr;