【发布时间】:2015-11-27 05:46:06
【问题描述】:
当我尝试将vector.erase() 用于循环内的二维向量时,我遇到了分段错误。代码如下:
vector<vector<int> > fault;
...
...
for(i=0; i<10; i++)
{
for(j=0; j<fault.size(); j++)
{
if(pointer[i].val == fault[j][0])
fault.erase(fault.begin() + j); //ERROR HERE!
}
}
是不是因为向量故障的大小发生了变化?我可以在这里使用擦除删除成语吗?如果是这样,我会怎么做?
非常感谢!
【问题讨论】:
-
我在这里看不到任何会导致问题的东西,除非
pointer数组少于 10 个元素。 (请注意,当您从错误中删除元素j时,您的下一次循环迭代将跳过向下移动的元素以替换已删除的元素。) -
感谢您指出这一点!
Pointer总是有 10 个元素。我尝试调试错误,发现fault.erase() 在vector.h中输入了某个函数并没有退出。 -
您必须提供一个最小的示例,就目前而言,您的问题被认为是题外话。请阅读指南,它们还给出了这些规则的理由。也就是说,将您想要保留的那些元素复制到一个新向量(预先保留足够的空间)然后与前一个向量交换会更容易且通常更高效。
标签: c++ vector segmentation-fault