添加矢量时出现分割故障.(c++)
Segmentation fault when adding a vector. (C++)
我有一个非常基本的类它有一些方法和一些类变量。一切都很顺利,直到我在头文件中的成员变量中添加了一个向量:
std::vector <std::string> vectorofstuff;
如果我所做的只是添加这一行,那么我的程序运行完美,但在最后,在所有输出都在那里之后,我得到一个关于segfault的消息。
我的第一个猜测是,我需要调用vector的析构函数,但这似乎不起作用。另外,我的理解是,我不需要调用析构函数,除非我使用"new"这个词。
有正确方向的推力吗?谢谢束!
我猜以下发生在你身上,或者它是类似的涉及未实现的依赖/头。不管怎样,我希望这个答案可以出现在谷歌上,帮助一些后来非常困惑的程序员弄清楚为什么他们突然看到任意崩溃。
因此,从经验来看,如果您编译新版本的SomeObject.o
,但意外地有另一个目标文件#include
和旧版本的SomeObject.hpp
,则可能发生这种情况。这将导致损坏,这将由编译器引用过时的成员偏移量等引起。有时,这主要工作,只在销毁对象时产生段错误-无论是相关的还是看似遥远的对象-其他时候,程序立即或在两者之间的某个地方产生段错误;我已经看到了几种排列(很遗憾!)。
对于那些想知道为什么会发生这种情况的人来说,也许这只是我在编程时睡眠太少的反映,但是我在Git子模块的上下文中遇到过这种模式,例如:
-
MyRepo
- /
GuiSubmodule
- /
HelperSubmodule
- //
GuiSubmodule
如果(A)你在GuiSubmodule
中有一个新的提交,它还没有被拉入HelperSubmodule
的副本,(B)你的makefile
编译MyRepo/uiSubmodule/SomeObject.o
, (C)另一个翻译单元-无论是在子模块中还是通过#include
的危险在主repo中-链接到具有不同类布局的旧版本的SomeObject.hpp
…在你最终意识到一个简单的错误之前,你会度过一段有趣的时光,并追逐大量的转移话题。
因为我从头开始拼凑我的构建过程,我可能只是没有正确使用Git/make
-或者足够严格(忘记推/拉所有子模块)。可能是后者!我现在看到的奇怪的bug至少少了:)
您可能在类的某个地方损坏了vectorofstuff
成员的内存。当调用类析构函数时,也会调用vector的析构函数,它将尝试指向和/或删除无效内存。
我只是瞎弄了一下,为了确定起见,我决定对所有内容进行rm并重新编译。你猜怎么着?这就解决了问题。我不知道为什么,在makefile中我这样做,但无论如何,我很高兴我可以继续前进并继续工作。非常感谢你的帮助!
- 分段故障(堆芯转储)矢量
- C++中的动态铸造故障
- 数组的指针从不分段故障
- vscode g++链路故障:体系结构x86_64的未定义符号
- 访问被拒绝后,c++中的故障保护代码
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 调试 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++ 扩展模块案例段故障
- 带升压的 SEG 故障::make_shared / 特征3 内存.h.
- 在 c++ 中,发生故障后是否需要 stream.clear()?
- 分段故障背包问题
- 分段故障 11,从类函数显示动态 C 字符串