struct pos包含开始和结束substringpos向量包含一个POSpos的阵列向量包含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
}
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
的指针。由于您从未初始化它们,因此试图解决非初始化的指针会导致不确定的行为,在您的情况下,您会得到细分错误。也许最好存储向量本身,而不是指针?
此错误是由于向量下标引起的。向量或数组应在索引0开始。请更改以下如下
for(int v=0;v<permutations-1;v++)
{
// your code
}