C++ -<Task> 删除堆上分配的任务数组时,将列表 l(或任何 STL 容器)添加为数据成员会导致错误
C++ - Adding a list<Task> l (or any STL Container) as a data member is causing an error, when deleting an array of tasks allocated on heap
我有一个名为Task的类。头文件如下所示:
class Task
{
public:
Task();
//Methods Declarations
private:
int uid;
list<Task> l;
friend ostream & operator<<(ostream & os, const Task &t);
friend ostream & operator<<(ostream & os, const list<Task *> &l);
};
现在在我的主文件中,我运行:
Task * tasks[7];
for (int i = 0; i != 7; ++i)
tasks[i] = new Task();
delete [] *tasks;
在运行delete[] *tasks;
时,我得到以下错误消息:
Assignment 4(23901) malloc: *** error for object 0x1001009f8: pointer being
freed was not allocated *** set a breakpoint in
malloc_error_break to debug
一旦我注释掉list < Task *> l
并重新运行它,错误消息就会消失。我尝试将list < Task * > l
更改为list < Task > l
,但没有成功。
我想不通。当在堆栈上分配list < Task >
(指向堆元素的井指针)时,为什么会出错?(STL管理)。也尝试了vector<int>
。我得到了同样的东西。
更新:删除任务[i]没有做到这一点。
您不使用
delete [] *tasks;
但是
for (int i = 0; i != 7; ++i)
delete tasks[i];
相关文章:
- 在STL容器中使用模板类
- 检查函数返回类型是否与STL容器类型值相同
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- 如果我真的真的想从 STL 容器继承,并且我继承构造函数并删除新运算符,会发生什么?
- 对象 C++ 向量的 STL 容器
- 如何在不破坏现有应用程序的情况下更改 API 中 stl 容器的数据类型?
- 在 STL 容器的 STL 容器上调用 clear
- "迭代器"和"const_iterator"不是 STL 容器的必需成员?
- 删除包含包含动态对象的 STL 容器的智能指针
- C++:在子类中扩展静态 STL 容器/映射成员?
- ostream 运算符<< 为获取 STL 容器而过载,传递 std::string 会破坏它?
- 没有 STL 容器的迭代器
- 为什么某些 STL 容器(堆栈、队列、优先级队列)不支持迭代器?
- 接受任何 STL 容器的函数
- C++ STL 容器中优先级搜索的优雅方法
- 我们如何打印出C++ STL 容器的value_type?
- 获取嵌套 stl 容器的大小(以字节为单位)
- 如何在C++中重新实现包含指针的 STL 容器的类的迭代器
- 迭代器和 STL 容器的关系
- 如何用索引增量generate_n填充STL容器