vector <float>*导致seg错误!

ant*_*thr -3 c++

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

std::vector<float>* MyVec;
Run Code Online (Sandbox Code Playgroud)

然后我在for循环中填充这个:

MyVec->push_back(somevalue)
Run Code Online (Sandbox Code Playgroud)

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

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

提前致谢.

Ben*_*ier 11

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

std::vector<float>* MyVec = new std::vector<float>();
Run Code Online (Sandbox Code Playgroud)

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

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

std::vector<float> MyVec;
MyVec.push_back(somevalue)
Run Code Online (Sandbox Code Playgroud)

  • +1提到自动向量的唯一答案. (3认同)

Naw*_*waz 7

你没有分配内存:

std::vector<float>* MyVec = new std::vector<float>();
Run Code Online (Sandbox Code Playgroud)

因为MyVec是一个指针std::vector<float>,你做上面,使用前MyVec.

另外,一旦完成,不要忘记释放内存MyVec:

delete MyVec;
Run Code Online (Sandbox Code Playgroud)

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

std::vector<float> MyVec; //it is NOT a pointer.
Run Code Online (Sandbox Code Playgroud)

并将其用作:

MyVec.push_back(someFloatValue);
Run Code Online (Sandbox Code Playgroud)

  • +1表示"你不需要指针开头". (3认同)

Cha*_*had 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;
Run Code Online (Sandbox Code Playgroud)

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


Kil*_*nDS 5

你应该像这样初始化它:

std::vector<float>* MyVec = new std::vector<float>();
Run Code Online (Sandbox Code Playgroud)

不要忘记稍后删除它:

delete MyVec;
Run Code Online (Sandbox Code Playgroud)

或者你把它包装在智能指针中(例如来自boost)