Android Studio3.0开发JNI流程------JNI开发遇到中stack corruption detected[Fatal signal 6 (SIGABRT)......debug]
程序员文章站
2022-06-12 20:46:07
...
今天开发写JNI中的加密与解密过程中遇到了一个奇怪的问题
stack corruption detected
意思是:堆栈溢出检测
代码如下:
void tttt(JNIEnv *env, jclass type) {
LOGI("========= 字符串加解密--开始 =========");
char *original_text = "我喜欢JNI - I Love JNI"; //原始文本
char cipher_text[1024] = ""; //密文
char decrypt_text[1024]=""; //解密文本
LOGD("原文: %s ", original_text);
Encryption_C(original_text, cipher_text); //加密过程
LOGD("密文: %s", cipher_text);
Decryption_C(cipher_text, decrypt_text); //解密过程
LOGD("解密: %s", decrypt_text);
//printf("nihaoa");
LOGD("--------测试密文转明文--------");
LOGD("原文:我喜欢JNI - I Love JNI");
char *str = "f799a2f6a7adf7bdb35b5f5a313e315a315d708776315b5f5a";
LOGD("加密密文字符串: %s", str);
char str_en[1024] = "";
//解密过程...
Decryption_C(str, str_en);
LOGD("解密密文字符串: %s", str_en);
LOGI("========= 字符串加解密--结束 =========");
}
bug崩溃图:
在这提示堆栈溢出,在调式过程中,我尝试着少写LOGD打印日志,发现有时候程序不会出现崩溃信息,加上一些log日志就会崩溃。
在网上各种找办法,都没有解决问题,我在试着写行log调式,发现在Decryption_C( )方法就会崩溃。经过多番摸索发现问题是,在字符串拼接(C++的字符串拼接函数)过程中,传入的参数的值时, 传入 char *str等值会出现报内存错误。经过将 char *original_text和char *str 改为char original_text[ ]和char str[ ] 时程序就不会出现崩溃……
这个bug引起的原因可能与字符串操作有关,与strtok、strcpy、strcat等需要指针(*)等的函数有关……
上一篇: 第六章继承和多态(重要)
下一篇: 一个巨宅男子的超级爆笑日志