У меня есть char **, в основном массив строк, который мне нужно удалить. Каков правильный способ сделать это, чтобы все указатели были очищены?
Каков правильный способ удаления char **
Ответ 1
char** StringList ;
int nStrings ;
....
for (int i = 0 ; i < nStrings ; i++)
delete[] StringList[i] ;
delete[] StringList ;
Конечно, это проще, если вы начинаете с
std::vector<std::string> Stringlist ;
Тогда это просто
StringList.clear() ;
Ответ 2
Правило большого пальца состоит в том, что для каждого new
(или new[]
), который вы выпустили, вам нужен один delete
(или delete[]
).
Итак, если вы это сделали:
char **pp = new char*[N];
for (i = 0; i < N; i++)
{
pp[i] = new char[L];
}
то вам нужно будет очистить:
for (i = 0; i < N; i++)
{
delete [] pp[i];
}
delete [] pp;
Однако следует отметить, что, поскольку вы находитесь на С++, вероятно, вы должны использовать std::vector<std::string>
, а не массивы массивов raw char
, потому что он будет управлять своей собственной очисткой.
Ответ 3
Сделайте сопоставление с образцом, как описано ниже:
char *arr = new char[10];
char *p = new char;
delete [] arr;
delete p;
Вы видели шаблон, когда использовать что?
Итак, перейдите к исходному вопросу:
char **dp = new char*[100]; //100 number of `char*`
for ( int i = 0 ; i < 100 ; i++ ) //loop for 100 times
dp[i] = new char[30]; //allocate memory for each `char*`
//deallocate
for ( int i = 0 ; i < 100 ; i++ )
delete [] dp[i]; //deallocate memory for each `char*`
delete [] dp; //deallocate memory for `char**`
Ответ 4
for(int i = 0; i < array_length; ++i)
{
delete[] array[i]; // delete each entry in the array (assuming you used new[] for each string)
}
delete[] array; // delete the actual array.
Ответ 5
Я предполагаю, что у вас есть массив вроде этого:
char **pp = new char* [10]; // for the base pointer
for(int i = 0; i < 10; i++)
pp[i] = new char[100]; // for every char* string
Вы должны следовать обратному порядку. Сначала очистите строки элементов, а затем основной указатель.
for(int i = 0; i < 10; i++)
delete[] pp[i];
delete[] pp;
Ответ 6
for (int i = rows; i > 0; --i) {
delete[] anArray[i-1];
}
delete[] anArray;