向量交换向量中的分段错误,将内存分配给向量向量的指针

时间:2017-09-04 03:19:03

标签: c++ vector

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

    }

2 个答案:

答案 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
}