У меня был vector<Points*> points;
(size: 6
со всеми уникальными Points
) в моей программе, в которой я повторял точки, чтобы нарисовать что-то на экране. Однако, согласно моим новым требованиям, я бы увеличил длину вектора до size: 14
.Предотвращение двойного удаления указателей
Новые элементы, которые должны были быть добавлены должны были быть от предыдущего 6
Points
, поэтому вместо того, чтобы выделить новую память, я думал, что только с помощью предыдущих указателей следующим образом:
while (currentSize < 14){
int rndPoint = getRandomPoint(0, 5); //random index to choose from the vector
points->push_back(points[randPoint]);
}
В деструкторе класс, когда я для освобождения памяти, я делаю следующее:
for(int i=0;i<points.size(); ++i){
if(points[i] != NULL){
delete (points[i]);
}
}
Однако, когда я пытаюсь выйти из программы - я получаю ошибку нарушения доступа в контуре (в частности, когда i
достигает индекса 6
). Когда я уже удалил 6 уникальных точек, используя delete
, почему это условие if (points[i] != NULL)
приводит к true
для i=6,7...13
?
Установить 'points [i] = NULL;' после 'delete', это не делается автоматически. Также проверьте, соответствует ли ваш класс [правилу три] (http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three). –
@ πάνταῥεῖ Это не вопрос. –
@ πάνταῥεῖ Этого недостаточно. Некоторые из элементов 'points []' такие же, как и предыдущие, ergo double delete. –