Android Studio3.0开发JNI流程------JNI开发遇到中stack corruption detected[Fatal signal 6 (SIGABRT)......debug]

今天开发写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崩溃图:
Android Studio3.0开发JNI流程------JNI开发遇到中stack corruption detected[Fatal signal 6 (SIGABRT)......debug]_第1张图片

在这提示堆栈溢出,在调式过程中,我尝试着少写LOGD打印日志,发现有时候程序不会出现崩溃信息,加上一些log日志就会崩溃。
在网上各种找办法,都没有解决问题,我在试着写行log调式,发现在Decryption_C( )方法就会崩溃。经过多番摸索发现问题是,在字符串拼接(C++的字符串拼接函数)过程中,传入的参数的值时, 传入 char *str等值会出现报内存错误。经过将 char *original_textchar *str 改为char original_text[ ]char str[ ] 时程序就不会出现崩溃……

这个bug引起的原因可能与字符串操作有关,与strtok、strcpy、strcat等需要指针(*)等的函数有关……

你可能感兴趣的:(jni)