矢量<float>*导致赛格故障!

vector<float>* causing seg fault!

本文关键字:故障 lt float gt 矢量      更新时间:2023-10-16

我有一个浮点数向量,定义为:

std::vector<float>* MyVec;

然后我在for循环中填充了:

MyVec->push_back(somevalue)

,我得到了一个隔离错误。为了尝试找出发生了什么,我注释掉了push_back行,我仍然看到了一个segfault,当它segfault时,MyVec的大小为490618047。

可能是我忘了对这个向量做什么,它是如何被这么大的数字填充的,而没有任何项被输入到向量中?

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

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

它将指向一些随机的内存位置,并且不可用。

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

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

您没有分配内存:

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);

您是否为您声明的指向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;

在没有看到更多代码的情况下,这就是简单的问题。我想知道你是否需要动态分配你的向量,如果是这样,我建议使用一个合适的智能指针来完成这个任务。

你应该这样初始化它:

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

以后不要忘记删除:

delete MyVec;

或者你把它包装在一个智能指针中(例如从boost)