为什么SIGSEGV崩溃的故障地址保持不变

Why the fault address of the SIGSEGV crash remains the same?

本文关键字:地址 故障 SIGSEGV 崩溃 为什么      更新时间:2024-09-24

我有一个多线程CPP程序(一个侦听器线程,一个数据处理器线程(在arm64-v8a Android平台上进行了迁移。

最近,由于以下相同的原因,它继续崩溃:

E CRASH   : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr fffffffffffffffc

据我所知,由于fault addr保持不变,它不可能是像";访问数组越界";或";取消引用NULL/未初始化指针";,所以我能想到的唯一原因是";堆栈溢出";,我说得对吗?

那么,我的程序到底发生了什么,更重要的是,我该如何找到真正的原因和解决方案呢?

提前谢谢。

故障地址保持不变并不意味着您可以排除您提到的问题。事实上,在我看来,可能是在执行NULL值的指针运算(例如数组索引(,导致-4被用作地址。

您可以在调试器下运行程序,或者至少使用调试器分析核心转储。此外,请使用{内存、地址、线程}消毒器或类似的检测工具。