struct Pos包含开始和结束 substringPos向量包含一个Pos Pos矢量的数组向量包含substringPos 通过保留调用,通过置换数增加数组的大小 数组的第一个元素substringPos通过交换调用
复制到数组的其他元素 struct Pos
{
int start;
int end;
};
typedef vector<Pos*> PosVector;
vector<struct Pos*>substringPos;
struct Pos*temp=new Pos;
temp->start=3;
temp->end=10;
substringPos.push_back(temp);
vector<PosVector*> array;
array.push_back(&substringPos);
array.reserve(permutations);
for(int v=1;v<permutations-1;v++)
{
array[v]->push_back(temp);//gives segmentation fault
array[v]->swap(*array[0]);//gives segmentation fault
}
答案 0 :(得分:0)
vector<PosVector*> array;
array.push_back(&substringPos);
array.reserve(permutations);
for(int v=1;v<permutations-1;v++)
{
array[v]->push_back(temp);//gives segmentation fault
array[v]->swap(*array[0]);//gives segmentation fault
}
此代码表现出未定义的行为。让我们假装,permutations
变量已初始化且大于1.当您调用array.reserve
时,您在array
向量中分配内存以存储permutations
个元素数。每个元素都是指向PosVector
的指针。由于您从未初始化它们,因此尝试解析未初始化的指针会导致未定义的行为,并且在您的情况下会出现分段错误。也许最好存储矢量本身,而不是指针?
答案 1 :(得分:0)
此错误是由于矢量下标超出范围。矢量或数组应从索引0开始。 请更改以下循环
for(int v=0;v<permutations-1;v++)
{
// your code
}