我有一个指向类的指针向量。我需要调用它们的析构函数并释放它们的内存。由于它们是指针向量 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;
}
}
那里的 printf 是因为我有一个会说话的析构函数来查看分段错误发生在哪个染色体中。当调用 clearPool() 并说我们的大小为 100 时,它可以在 0 到 100 之间的任何染色体中给出分段错误。
我不知道为什么会发生这种情况,也没有办法真正找到问题所在,因为在使用断点进行调试时,我所看到的只是它发生在随机染色体上。
我正在使用代码块 IDE 和 gdb 调试器。发生分段错误时的堆栈跟踪有 4 个内存地址和一个函数wsncpy()
。