У меня есть вектор указателей на класс. Мне нужно вызвать их деструкторов и освободить их память. Так как они являются векторными указателями, vector.clear () не выполняет эту работу. Поэтому я продолжил делать это вручную, вот так:
void Population::clearPool(std::vector<Chromosome*> a,int size)
{
Chromosome* c;
for(int j = 0 ;j < size-1;j++)
{
c = a.back();
a.pop_back();
delete c;
printf(" %d \n\r",j);
c = NULL;
}
}
Печать там есть, потому что у меня есть говорящий деструктор, чтобы увидеть, в какой хромосоме происходит ошибка сегментации. Когда вызывается clearPool () и говорят, что мы получили размер 100, это может вызвать ошибку сегментации в любой хромосоме между 0 и 100.
Я понятия не имею, почему это может происходить, и у меня нет способа на самом деле найти, что не так, поскольку во время отладки с точками останова я вижу только то, что это происходит в случайных хромосомах.
Я использую IDE кодовых блоков и отладчик GDB. Трассировка стека при возникновении ошибки сегментации имеет 4 адреса памяти и функцию wsncpy()
.