今天遇到了一个SIGSEGV程序崩溃的问题

今天遇到了一个SIGSEGV程序崩溃的问题:

Program received signal SIGSEGV, Segmentation fault.

[Switching to Thread 0x73e22420 (LWP 2190)]
0x76dcdb54 in ?? () from /usr/lib/arm-linux-gnueabihf/libstdc++.so.6
(gdb) bt
#0 0x76dcdb54 in ?? () from /usr/lib/arm-linux-gnueabihf/libstdc++.so.6
#1 0x76e0e26a in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string() () from /usr/lib/arm-linux-gnueabihf/libstdc++.so.6
#2 0x0008a3f0 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb) quit

 

使用gdb大法都搞不定啊。打印调用堆栈只有两行。

同时添加日志,发现该崩溃发生在函数返回位置。

说明是老朋友了。就是局部变量过大,导致堆栈段溢出。

把局部变量修改为全局变量后,之前的崩溃位置不在崩溃。

但是崩溃位置变成其他用到这个类型的局部变量的函数返回位置。

经过灵机一动的分析。认为是函数返回的时候,这个类型的析构函数崩溃。

进一步调查发现是建构函数错误初始化的原因。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值