矢量<float>*导致赛格故障!
vector<float>* causing seg fault!
我有一个浮点数向量,定义为:
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)
相关文章:
- 分段故障(堆芯转储)矢量
- C++中的动态铸造故障
- 数组的指针从不分段故障
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- vscode g++链路故障:体系结构x86_64的未定义符号
- 访问被拒绝后,c++中的故障保护代码
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- 调试 CUDA MMU 故障
- Geeksforgeeks C 程序故障排除:IEE 754 表示法为十进制
- Arch Linux.AUR 包 mysql 不能用 makepkg 构建.错误:构建 () 中出现故障
- 正在处理故障(堆芯转储)
- 在 Boost::fiber 中引发的BOOST_ASSERT故障 Visual Studio "Debug" 构建
- 如何进行故障排除:未定义对"非虚拟 thunk to ..."的引用
- C++函数过载会导致 SEG 故障
- 分段故障 运行C++代码时出现 SIGSEGV
- 当新的故障时,是否有必要留出一些紧急内存?
- Python & C-C++ 扩展模块案例段故障