C ++ - Добавление списка <Task>l (или любого контейнера STL) в качестве члена данных приводит к ошибке при удалении массива задач, размещенных в куче - PullRequest
0 голосов
/ 26 марта 2012

У меня есть класс под названием 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>.Я получаю то же самое.

ОБНОВЛЕНИЕ: удаление задач [я] не добился цели.

1 Ответ

5 голосов
/ 26 марта 2012

Вы не используете

delete [] *tasks;

, но

for (int i = 0; i != 7; ++i)
    delete tasks[i];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...