mac*_*guy 0 c++ memory debugging pointers
我有一个叫做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);
};
Run Code Online (Sandbox Code Playgroud)
现在在我的主文件中,我运行:
Task * tasks[7];
for (int i = 0; i != 7; ++i)
tasks[i] = new Task();
delete [] *tasks;
Run Code Online (Sandbox Code Playgroud)
在运行时,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
Run Code Online (Sandbox Code Playgroud)
一旦我注释掉list < Task *> l
并重新运行它,错误消息就会消失.我试过改变list < Task * > l
,list < Task > l
但是没有用.
我无法弄清楚.为什么它会list < Task >
在堆栈上分配时出错(指向堆元素的指针)?(STL管理).也试过了vector<int>
.我得到了同样的东西.
更新:删除任务[i]没有做到这一点.
你不用
delete [] *tasks;
Run Code Online (Sandbox Code Playgroud)
但
for (int i = 0; i != 7; ++i)
delete tasks[i];
Run Code Online (Sandbox Code Playgroud)