Ped*_*rea 0 c++ arrays string memory-management
这是我在以下问题的后续跟进:C++上带有malloc的字符串数组
正如我已经实现托尼d溶液,我已分配的内存用于阵列std::string与malloc然后创建std:string用于与所述元件中的每一个new根据:
void* TP = malloc(sizeof (string) * SS);
for (int i = 0; i < SS; i++) {
new (&((string*)TP)[i]) std::string(Token[i]);
}
Run Code Online (Sandbox Code Playgroud)
(Token是一个vector<string>和SS一个int)
我知道这不推荐,我知道它不优雅,我知道有很多其他的解决方案来创建和填充这个数组,但我需要这样做
我现在遇到的问题是删除数组.因为我std::string单独创建每个但是数组的分配有一个malloc,在我的析构函数中我写了:
for (int i = 0; i < SS; i++) {
delete (&((string*) TP)[i]);
}
free(TP);
Run Code Online (Sandbox Code Playgroud)
但是在跑步时,它free(TP)正在指责"双重自由或腐败".
通过评论free(TP)我解决运行时的问题(隐藏真正的问题),但我需要确保所有内存都被释放,因为这可能会导致类内的内存泄漏.
那么,删除TP的每个元素是否足以释放所有内存?根据我的理解,malloc已经独立分配了内存,它需要独立于std::string元素而自由; 但是,为什么我会收到此错误?
你正在使用一个placement-new来运行std::string已malloc分配块上的构造函数,但是你正在使用delete哪个将运行析构函数并尝试释放内存(你不想在这里做第二个)重新释放free()).
你想手动运行析构函数,就像这样......
for (int i = 0; i < SS; i++) {
(&((string*) TP)[i])->~string();
}
free(TP);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
555 次 |
| 最近记录: |