vector <float> *导致seg错误!</float>

时间:2011-07-21 17:00:05

标签: c++

我有一个浮动向量,定义如下:

std::vector<float>* MyVec;

我在以后用for循环填充这个:

MyVec->push_back(somevalue)

我得到了一个段错误。为了试图找出发生了什么,我注释了push_back线,我仍然看到一个seg故障,当它出现故障时,MyVec的大小是490618047.

是否有一些我忘记使用此向量的东西,如果没有任何条目输入到向量中,如何填充如此庞大的数字?

提前致谢。

4 个答案:

答案 0 :(得分:11)

您创建了一个指向std::vector<float>的指针。如果你没有初始化它

std::vector<float>* MyVec = new std::vector<float>();

它将指向一些随机内存位置并且无法使用。

也许你甚至不需要使用指针。

std::vector<float> MyVec;
MyVec.push_back(somevalue)

答案 1 :(得分:7)

你没有分配内存:

std::vector<float>* MyVec = new std::vector<float>();

因为MyVec指针std::vector<float>,所以在使用MyVec之前,您必须执行上述操作。

另外,一旦完成MyVec,请不要忘记取消分配内存:

delete MyVec;

除此之外,我认为,你不需要指针开始;如果是这样,那么你应该执行以下操作而不是声明一个指针:

std::vector<float> MyVec; //it is NOT a pointer.

并将其用作:

MyVec.push_back(someFloatValue);

答案 2 :(得分:5)

您是否为指定的std::vector<float>指针分配了任何存储空间?

// declares a pointer to a vector of float
std::vector<float>* myvec;

// will segfault here
myvec->push_back(0.0);

// need to create this vector dynamically
std::vector<float>* myvec = new std::vector<float>();

// now you can push_back
myvec->push_back(0.0);

// when you're done with it
delete myvec;

没有看到更多代码,简而言之就是问题。我会质疑你是否需要动态分配你的向量,如果有的话,我会建议使用适当的智能指针来执行该任务。

答案 3 :(得分:5)

你应该像这样初始化它:

std::vector<float>* MyVec = new std::vector<float>();

不要忘记稍后删除它:

delete MyVec;

或者您将其包装在智能指针中(例如来自boost