我有一个浮点数向量,定义如下:
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)
你没有分配内存:
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)
您是否为指定的指针分配了任何存储空间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)
没有看到任何更多的代码,简而言之就是问题.我会质疑你是否需要动态分配你的向量,如果有的话,我会建议使用适当的智能指针来完成该任务.
你应该像这样初始化它:
std::vector<float>* MyVec = new std::vector<float>();
Run Code Online (Sandbox Code Playgroud)
不要忘记稍后删除它:
delete MyVec;
Run Code Online (Sandbox Code Playgroud)
或者你把它包装在智能指针中(例如来自boost)
| 归档时间: |
|
| 查看次数: |
776 次 |
| 最近记录: |