Как правильно удалить char**
У меня есть char**, в основном массив строк, которые мне нужно удалить. Каков правильный способ сделать это, чтобы все указатели были очищены?
6 ответов
char** StringList ;
int nStrings ;
....
for (int i = 0 ; i < nStrings ; i++)
delete[] StringList[i] ;
delete[] StringList ;
конечно, проще, если вы начнете с
std::vector<std::string> Stringlist ;
тогда это просто
StringList.clear() ;
основное правило заключается в том, что вам нужен delete
(или delete[]
) для каждого new
(или new[]
), что вам выдали.
если ты:
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;
однако следует отметить, что, поскольку вы находитесь в C++, вы, вероятно, должны использовать std::vector<std::string>
вместо массивов массивов raw char
, потому что он будет управлять своей собственной очисткой.
сделать по шаблону, как описано ниже :
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**`
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.
Я предполагаю, что у вас есть массив, как это:
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;