android ndk开发SIGSEGV错误

最近进行ndk开发,偶尔会报Fatal signal 11(SIGSEGV),这个问题非常诡异,诡异就在偶然出现,并且在不同的地方。查看日志发现都是内存malloc,free方面的错误,有opencv中的,有对std::vector进入插入分配内存引发的,有在jni函数中获取数组指针发生的,真的是让人摸不着头脑:

android ndk开发SIGSEGV错误_第1张图片

android ndk开发SIGSEGV错误_第2张图片


最终发现并不程序本身的问题。问题是heap size的限制,因为我的sdk是让java虚拟机回收java对象的时候自动delete它包装的c++对象,理论上没错。最后发现解决方法是及时将c++对象delete,new 一个c++后,不用了马上手动delete,不要依靠java虚拟机回收中对象中调用delete,gc可能不及时,造成内存超出限制。

你可能感兴趣的:(c++,android,android,ndk,SIGSEGV)