Массив указателей на общие объекты - PullRequest
1 голос
/ 01 апреля 2011

У меня есть список массивов, который содержит массив указателей на существующие статические объекты. Каким-то образом ему удается утратить много памяти.

Fruit fruits[20];
Fruit **list;

void addFruites()
{
    list = new Fruit*[10];
    for(int i=0; i<10; i++)
    {
        list[i] = &fruits[i];
    }
}

До сих пор все, кажется, работает. Но всякий раз, когда я хочу удалить (список):

 delete []list;

кажется, что он падает.

HELP !!

Ответы [ 2 ]

3 голосов
/ 01 апреля 2011

Я думаю, вы могли бы сделать

list = new Fruit * [10];

Если list должен быть массивом Fruit указателей. Следующее:

list = new Fruit[10];

выделяет память для 10 новых Fruit объектов, используя конструкторы по умолчанию, а не 10 указателей на Fruit объектов.

0 голосов
/ 01 апреля 2011

Полагаю, строка

list = new Fruit[10];

является опечаткой и отсутствует *.В противном случае код не скомпилируется.Предполагая это, нет ничего плохого в коде, который вы показываете здесь.(Технически - можно определенно не согласиться с дизайном.) Проблема в другом месте, возможно, в повреждении арены свободного пространства.(Попробуйте запустить код в valgrind и посмотрите, что он вам скажет.)

...