jni開發strcat導致的異常

由於添加x64 cpu支持,之前的jni項目從 ndk8升級到了ndk10,升級編譯發現以前的代碼編譯不通過,因爲jni對c++支持不是很好,於是改用c寫法,

之前有一段字符拼接改爲了使用strcat方法進行拼接,

編譯通過,功能正常,我以爲這就好了,但是後來我的項目經常莫名奇妙的崩潰,

而且沒有確定的錯誤提示,我起初認爲是代碼優化問題,我對app進行了內存優化操作,但是問題依舊,

報錯顯示Channel is unrecoverably broken and will be disposed!

網上也找不到問題的確定原因,但是從保存的Log中打印了大量彙編信息確定,是jni錯誤

jni的排查是非常困難的,幸運的是,我找到了

我採用strcat方法拼接了兩個字符串,這導致了內存操作錯誤,

因爲我是直接使用方法拼接,方法參數如下

char *strcat(char *dest,char *src);
dest爲起始字符串,src爲拼接在後面的字符串
這樣做確實成功將兩個字符串拼接起來了,但是這導致內存操作錯誤,因爲strcat只是將src加到了dest的後面,但是dest沒有多餘的容量來容納這些數據
雖然我們編譯過去,也得到了正確的結果,單每次我們的數據都會超出所屬內存,最終導致異常崩潰!
正確的拼接方法如下
char* c = (char*)malloc(strlen(a) + strlen(b) + 1);
	strcpy(c, a);
	strcat(c, b);
c就是拼接好的字符串


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章