gpt4 book ai didi

C++ - 添加列表 l(或任何 STL 容器)作为数据成员导致错误,当删除分配在堆上的任务数组时

转载 作者:太空宇宙 更新时间:2023-11-04 16:28:19 26 4
gpt4 key购买 nike

我有一个名为 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];

关于C++ - 添加列表 <Task> l(或任何 STL 容器)作为数据成员导致错误,当删除分配在堆上的任务数组时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9867858/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com