SIGSEGV SEGV_MAPERR at 0x00000008
0 libpjsua2.so 0x56585a88 pj::Call::getInfo() const
1 libpjsua2.so 0x56546b44 std::allocator<pj::CallMediaInfo>::allocator()
我正在使用pjsip作为我的一个爱好项目(符合GPL)。在上方,您可以看到从crashlytics收到的堆栈跟踪。我正在为pjsip使用Java包装器。
有很多用户(50%)受此错误影响,但我无法在本地设备上重现它。
不确定,但我怀疑以下java调用会导致错误。哪个通过JNI调用C ++
public void notifyCallState(MyCall call) {
if (currentCall == null || call.getId() != currentCall.getId())
return;
CallInfo ci;
try {
ci = call.getInfo();
} catch (Exception e) {
ci = null;
}
Message m = Message.obtain(handler, MSG_TYPE.CALL_STATE, ci);
m.sendToTarget();
if (ci != null && ci.getState() == pjsip_inv_state.PJSIP_INV_STATE_DISCONNECTED) {
currentCall = null;
}
}
代码片段来自psjua下载的示例。 Camera activity returning null android。我的代码是一样的。任何帮助高度赞赏
答案 0 :(得分:2)
从堆栈跟踪看起来call
为空,getId
方法为0x8偏移量。
如果确实如此,那么解决方法是确保notifyCallState
不会使用null
参数调用,或者在方法中检查它,即:
if (call == null || currentCall == null || call.getId() != currentCall.getId())
return;
答案 1 :(得分:0)
您的程序很可能会遇到某种内存损坏,很可能是堆内存。以下观察指向了这一点。
<强>建议强>
Windows平台
https://stackoverflow.com/a/22074401/2724703
Linux平台
https://stackoverflow.com/a/22658693/2724703
Android平台
https://stackoverflow.com/a/22663360/2724703
您可能希望参考上述帖子,以了解如何处理此类问题。根据我的理解,android平台没有动态工具,因此您可能必须使用库的某些版本(调试/附加日志记录)。
我确实希望以上信息可能有用,并且会给出一些指导来解决您的问题。