欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

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

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