我有一个浮动向量,定义如下:
std::vector<float>* MyVec;
我在以后用for循环填充这个:
MyVec->push_back(somevalue)
我得到了一个段错误。为了试图找出发生了什么,我注释了push_back线,我仍然看到一个seg故障,当它出现故障时,MyVec的大小是490618047.
是否有一些我忘记使用此向量的东西,如果没有任何条目输入到向量中,如何填充如此庞大的数字?
提前致谢。
答案 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)