Удаление динамического массива, объявленного через нотацию массива arr[x][y]
#include <iostream>
using namespace std;
int main() {
int cities;
cin >> cities;
int mas[cities][cities];
for (int i = 0; i < cities; ++i) {
for (int j = 0; j < cities; ++j) {
mas[i][j] = 0;
}
}
for (int i = 0; i < cities; ++i) {
delete[] mas[i]; // ERROR: Cannot delete expression of type 'int[cities]'
}
delete[] mas; // ERROR: Cannot delete expression of type 'int[cities][cities]'
return 0;
}
Поскольку cities
не известна на этапе компиляции, то компилятор в строке int mas[cities][cities];
создает (автоматически) динамический массив, верно? Или что он создает? Почему я его не могу удалить в конце программы с помощью delete[]
?
mas
получает тип int(*)[cities]
, а mas[0]
получает тип int *
. То есть - компилятор создает СТАТИЧЕСКИЙ массив! Но как? Ведь размер не вычисляется на этапе компиляции.
Источник: Stack Overflow на русском