【发布时间】:2014-08-18 10:49:49
【问题描述】:
我有一个动态分配的 char** 数组作为我的一个类中的私有成员。
根据字数进行第一次分配
client_interests = new char* [n];
后面数组的每个索引都是按照字长+1分配的
char[i] = new char [strlen(word)+1];
这是否是释放此成员内存的正确方法(dtor 类正在调用此函数)?
void Client::deallocate()
{
int i;
for (i = 0; i < n; i ++) //loops through each word
{
delete [] client_interests[i]; //each word is an array of characters, hence delete [] is used
}
delete [] client_interests; //deallocating the pointer
client_interests = NULL;
}
谢谢!
【问题讨论】:
-
老实说,使用
std::vector<std::string>将是彻底处理此问题的最“正确”方式。 -
是的,我知道 - 但这是给我们的任务,我们必须使用 c 类型的字符串。
-
您的代码似乎没有任何错误,尽管
std::vector<std::string>是远更好的解决方案。 -
要在循环前检查
client_interests是否为空;否则,第二次调用该函数会用空指针做坏事。 (或者,直接在析构函数中完成这项工作,所以没有调用它两次的危险)。另外,请确保您关注Rule of Three(标准容器会自动为您提供)。
标签: c++ arrays memory-management