删除char **的正确方法是什么?

时间:2011-05-13 09:10:08

标签: c++ pointers delete-operator

我有一个char **,基本上是一个字符串数组,我需要删除。这样做的正确方法是什么,以确保清除所有指针?

6 个答案:

答案 0 :(得分:21)

经验法则是,您发出的每个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>而不是原始char数组的数组,因为它会管理自己的清理。 / p>

答案 1 :(得分:8)

char** StringList ;
int nStrings ;
....
for (int i = 0 ; i < nStrings ; i++)
  delete[] StringList[i] ;
delete[] StringList ;

当然,如果从

开始,它会更简单
std::vector<std::string> Stringlist ;

然后就是

StringList.clear() ;

答案 2 :(得分: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**`

答案 3 :(得分:2)

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.

答案 4 :(得分:0)

我假设你有这样的数组:

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;

答案 5 :(得分:0)

for (int i = rows; i > 0; --i) {
 delete[] anArray[i-1];
}
delete[] anArray;