我有一个大型的C ++函数,它使用OpenCV库并在Windows上运行cygwin g ++编译器。最后它给出了Aborted(核心转储)但该函数在此之前完全运行。我还尝试将print语句放在函数的末尾。那也印刷了。所以我认为代码中没有逻辑错误会产生错误。
请解释一下。
我也在使用assert语句。但是中止错误不是由于assert语句引起的。它并没有说断言失败了。它只是在没有任何消息的情况下结束。
此外,该文件是大型项目的一部分,因此我也无法发布代码。
gdb结果:
Program received signal SIGABRT, Aborted.
0x7c90e514 in ntdll!LdrAccessResource () from /c/WINDOWS/system32/ntdll.dll
答案 0 :(得分:2)
它看起来像是内存错误(写入释放内存,双重释放,堆栈溢出......)。当代码可以在Linux下编译和运行时,您可以使用valgrind来查看是否存在内存问题。此外,您可以尝试禁用部分应用程序,直到问题消失,以获得错误发生的线索。但是这种方法也会产生误报,因为与内存相关的错误会导致模块失败而不是导致错误的原因。您也可以在gdb中运行该程序。但是这里调试器指向的位置可能不是错误发生的位置。
答案 1 :(得分:0)
你没有给我们太多的帮助。但是,这似乎在释放资源时遇到了一些问题。也许堆腐败。您是否尝试在gdb下运行它,然后查看它崩溃的位置?另外,请检查所有新/删除呼叫是否匹配。
答案 2 :(得分:0)
将核心转储与二进制文件一起加载到gdb中,以便了解问题列表的位置。命令行是:
gdb <path to the binary> <path to the core file>
有关gdb的更多详细信息,请参阅GDB: The GNU Project Debugger。
答案 3 :(得分:0)