vector ::插入分段错误

时间:2011-02-17 11:11:32

标签: c++ stl vector

我有一个这样的课程:

classA
{
public:
  classA()
   {
     //Here I am doing something but nothing related to vector

   }

   void updateVec(int idx, int value)
   {
     //Here, I want to update vector vector based on args passed
     myVec.insert(myVec.begin() + idx, value);

   }

  std::vector<int> myVec;
}

现在,我在insert语句中遇到分段错误。我需要在某处初始化矢量吗?

3 个答案:

答案 0 :(得分:3)

分段错误意味着您正在尝试访问/写入尚未(尚未)分配的内存。在您的情况下,根据idx的值,myVec.begin() + idx可以指向向量分配区域之外的内存。在插入之前,您需要确保您的向量至少可以容纳idx个元素。 updateVec应该检查向量的当前大小,如果它不够大,它应该调用vector::reserve来分配足够的空间,以便插入新元素。

答案 1 :(得分:2)

您的代码似乎没有正确初始化它。

初始化用作本地var
创建一个大小为3的整数向量,初始化为0

std::vector<int> myvector (3,0);

如何在类的构造函数中初始化(然后调整大小)向量的简短示例

#include <iostream>
#include <vector>

class A {
public:
   A(int size);
   ~A();
   void updateVec(int idx, int value);
   void print();
private:
  std::vector<int> myVec;
};

A::A(int size) {
    myVec.resize(size);
}

A::~A() {
}

void A::updateVec(int idx, int value) {
     myVec.insert(myVec.begin() + idx, value);
}

void A::print() {
    std::vector<int>::iterator it;
    for (it=myVec.begin(); it!=myVec.end(); it++) {
        std::cout << " " << *it;
    }
}

int main() {
    A* a = new A(10);
    a->updateVec(2,10);
    a->print();
}

以下是有关如何在C ++中使用向量的文档/示例
http://www.cplusplus.com/reference/stl/vector/insert/

答案 2 :(得分:0)

是的,你这样做。向量开始为空。任何尝试访问超过向量结尾的项目都将导致错误。

要建议一个解决方案,我们需要知道矢量是否需要动态改变大小 - 或者它是否是固定大小,在什么时间点你会知道它需要的大小。

另外,如果您更新向量的第17个元素,但当时它只包含10个项目,您是否还要创建项目11到16?