作者:我俩的12月11_484 | 来源:互联网 | 2023-05-25 19:00
这是我在以下问题的后续跟进:C++上带有malloc的字符串数组
正如我已经实现托尼d溶液,我已分配的内存用于阵列std::string
与malloc
然后创建std:string
用于与所述元件中的每一个new
根据:
void* TP = malloc(sizeof (string) * SS);
for (int i = 0; i
(Token
是一个vector
和SS
一个int
)
我知道这不推荐,我知道它不优雅,我知道有很多其他的解决方案来创建和填充这个数组,但我需要这样做
我现在遇到的问题是删除数组.因为我std::string
单独创建每个但是数组的分配有一个malloc
,在我的析构函数中我写了:
for (int i = 0; i
但是在跑步时,它free(TP)
正在指责"双重自由或腐败".
通过评论free(TP)
我解决运行时的问题(隐藏真正的问题),但我需要确保所有内存都被释放,因为这可能会导致类内的内存泄漏.
那么,删除TP的每个元素是否足以释放所有内存?根据我的理解,malloc
已经独立分配了内存,它需要独立于std::string
元素而自由; 但是,为什么我会收到此错误?
1> Nick Strupat..:
你正在使用一个placement-new来运行std::string
已malloc
分配块上的构造函数,但是你正在使用delete
哪个将运行析构函数并尝试释放内存(你不想在这里做第二个)重新释放free()
).
你想手动运行析构函数,就像这样......
for (int i = 0; i ~string();
}
free(TP);
换句话说,"placement new"的匹配操作是"调用析构函数".