Это код, который я написал, чтобы понять работу с указателями. Здесь я хочу выделить и отобразить 2-мерный Pointerarray
int main()
{
constexpr int size = 10;
int** _2darray = new int* [size];
for ( int i = 0; i < size; i++ )
{
*(_2darray + i) = new int[i];
for ( int j = 0; j <= i; j++ )
{
*(*(_2darray + i) + j) = j;
}
}
for ( int i = 0; i < size; i++ )
{
for ( int j = 0; j <= i; j++ )
{
std::cout << _2darray[i][j] << " ";
}
std::cout << std::endl;
}
}
. Это приведет к печати этого:
0
0 1
0 1 2
0 1 2 3
0 1 2 3 4
0 1 2 3 4 5
0 1 2 3 4 5 6
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 9
Но если я хочу предотвратить утечку памяти сейчас, я бы хочу сделать это:
for ( int i = 0; i < size; i++ )
{
delete[] _2darray[i];
}
delete[] _2darray;
К сожалению, это даст мне исключение, что куча была повреждена
Я думаю, что происходит сбой, потому что он не знает точный размер подмассивов, но я также слышал, что delete всегда отслеживает, сколько байтов выделяется для массива.
Спасибо за любой короткий ответ.