向量交换的向量中的分割故障,将内存分配给指针为向量的向量



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
}

最新更新