繁体   English   中英

无法识别信号 SIGSEGV、分段错误的原因

[英]Unable to identify reasons for signal SIGSEGV, Segmentation fault

我在 ubuntu 中运行一个 cpp 程序。 我收到信号 SIGSEGV,分段错误。

我尝试使用 gdb 来查看分段错误的确切行。 我从这个问题中得到了这个想法:

确定导致分段错误的代码行?

gdb 向我返回这个:

Thread 1 "incremental_sat" received signal SIGSEGV, Segmentation fault.
0x00007ffff7857c50 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::compare(char const*) const () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6

请看下面的终端截图:

在此处输入图像描述

我正在使用涉及所有类型的向量的数据结构和用于 int 和 string 的 unordered_map。

我可以知道,所有代码行都是导致此错误的原因吗?

我是 CPP 调试的新手。 关于我可以继续处理此信息的方向的任何建议?

更新:在运行“bt”命令的建议之后,我添加了 output:

在此处输入图像描述

我观察到它在调用 cnf_transformation_out_diff() function 后出现分段错误。 因为它甚至没有打印用 cnf_transformation_out_diff() function 编写的第一个 cout 命令。

在此处输入图像描述

最后,我在朋友 Arpan 的帮助下解决了这个 bug。

在一种情况下,数据结构 gates_out_diff 保持为空。 我没有添加安全检查,程序正在访问 gates_out_diff[i][1] 值,因此导致了分段错误。

在我修复了那个案例之后它正在运行。 我花了一天时间。 希望它可以节省某人的时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM