Что происходит при удалении массива указателей в этом случае? - PullRequest
0 голосов
/ 05 июня 2018

Если я определяю массив следующим образом:
char** array=new char*[3];
, и я инициализирую массив, например, так:

for(int i=0; i<3;i++){  
array[i]=new char[5];  
}  

и после этого я делаю:

delete[] array;  

Что происходит при удалении?

1 Ответ

0 голосов
/ 05 июня 2018

Это приводит к утечке памяти: освобождается только память array, но память, зарезервированная для ячеек, не освобождается до закрытия вашей программы.

Вы должны сопоставить каждый new с delete:

for(int i=0; i<3;i++){  
    delete[] array[i];  
}  
delete[] array;  

Если вы получили указатель от какой-либо функции, вам нужно знать его размер, чтобы можно было освободить всю память.

Чтобы избежать ручной обработки памяти, вы можете использовать векторобщих указателей (std::vector<std::shared_ptr<char>) или в данном конкретном случае используйте строки (std::vector<std::string>).

...