Witam. Napisałem taki programik, który wypisuje w wierszach kolejne liczby (ilość liczb zależy od 2^nr wiersza). Ilość wierszy jest podawana przez użytkownika.
#include "stdafx.h"
#include
#include
#include
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int n,i,j;
int **w;
cout << "N: "; cin >> n;
if(n>=0 && n <=20)
{
w = (int**) malloc(n*sizeof(int));
for(i=0; i
{
int p = pow(2.0,i);
w[i] = (int*) malloc(p*sizeof(int));
for (j=0; j < p; j++)
w[i][j] = j+1;
}
}
cout << endl;
for(i=0; i
{
for(j=0; j < pow(2.0,i); j++)
cout << w[i][j] << " ";
cout << endl;
}
free(w);
cout << endl;
system("pause");
return 0;
}
Jednak chciałbym się dowiedzieć jak by można użyć tutaj new() i delete() zamiast malloc i free.
Masz tutaj memory leak(wyciek pamięci) gdyż źle zwalniasz w. Musisz zwalniać w identyczny(prawie) sposób co alokujesz, tylko, że od końca. Czyli gdy robisz:
int **ptr;
ptr = new int*[5]; //Alokujemy tablicę wskaźników na int(pierwszy wymiar)
for(int i = 0; i < 5; ++i)
ptr[i] = new int[5];//Alokujemy drugi wymiar
Musisz zwolnić tak:
for(int i = 0; i < 5; ++i)
delete[] ptr[i]; //Zwalniamy każdą sub-tablicę(drugi wymiar).
delete[] ptr;//Zwalniamy tablicę wskaźników(pierwszy wymiar).