关键词:
jni返回到java层的字符串有时正确,有时错误。错误的字符串可能是任何一串字符,看起来很奇怪。
通过加日志,得知生成的jstring已经不正确了,所以怀疑生成jstring用的char*有问题,可能被释放了。
分析代码,里边用的char*是从string转来的,只要string没被释放,char*就没问题。
问题找到了,代码只持有了char*,没有持有string,string在获取char*之后就可以被释放了,string释放之后,char*的指向就错误了,所以生成的jstring就错误了。
问题代码如下:
MD5 iMD5;
iMD5.GenerateMD5((unsigned char *) finalMessage, strlen(finalMessage));
const char *result = iMD5.ToString().c_str();// 这里没有持有toString生成的string,string后面就释放了。
//生成java String
jstring ret = env->NewStringUTF(result);
return ret;
修改如下:
string tempStr = iMD5.ToString();// 继续持有string
const char *result = tempStr.c_str();
// 生成java String
jstring ret = env->NewStringUTF(result);
return ret
和各种诡异bug打交道13年,我总结了18个经验(代码片段)
...郑芸,英文:HenrikWarne我写了我是怎样追踪这些年遇到的最有趣bug的。最近我重新浏览了这所有的194个条目(历时13年),看看我从这些bug中学到了学到了那些重要的经验教训。我分为编码、测试和调试三大类... 查看详情
处理activity#onresume()遇到java.lang.illegalargumentexception诡异异常(代码片段)
记录处理Android较为诡异的问题,Activity#onResume()发生IllegalArgumentException异常。1.Activity#onResume()异常最近在处理Bugly上的量级较大的问题,发现有一个较为奇怪的问题,发生在ActivityThread#performResumeActivity(), 查看详情
处理activity#onresume()遇到java.lang.illegalargumentexception诡异异常(代码片段)
记录处理Android较为诡异的问题,Activity#onResume()发生IllegalArgumentException异常。1.Activity#onResume()异常最近在处理Bugly上的量级较大的问题,发现有一个较为奇怪的问题,发生在ActivityThread#performResumeActivity(), 查看详情
一次“诡异”的ansible密码问题排查,最后的“真相”竟是这样
背景在做大批量运维的时候,DBA需要掌握和使用ansible。今天有同事使用ansible遇到了一个奇怪现象,和我交流了一下,我发现这个现象很奇怪,也很有趣,我认为是个BUG,于是排查,之后有了这篇文章。现象同事使用的是ansible2.7... 查看详情
jni使用碰到的问题
参考技术A记录下使用JNI的诡异问题1.传递String或int出错正常:staticint_open(JNIEnv*env,jclassthisz, jstringpath,intspeed)出问题:staticint_open(JNIEnv*env,jstringpath,intspeed)出错的原因是:把jclassthisz去掉了2.jniRegisterNativeMethods出错,提示找不到... 查看详情
(JNI) 使用 GetMethodID 获取 Java 方法的内存地址
】(JNI)使用GetMethodID获取Java方法的内存地址【英文标题】:(JNI)GetJavamethod\'smemoryaddresswithGetMethodID【发布时间】:2020-04-1904:16:35【问题描述】:如何获取我拥有JNIMethodID的方法的内存位置?我想通过使用JNI来挂钩或操作Java方法,因... 查看详情
记一次诡异的bug
问题描述:el-dialog里有一个el-select两者都被插到了body上,这就导致了当el-select获得焦点并滚动el-dialog时,el-select的下拉框滚出el-dialog时,并不会消失,因为他们得层级一样,都直接被插到的body上。尝试方法1(失败):给el-select... 查看详情
一个诡异的mysql查询超时问题,居然隐藏着存在了两年的bug(代码片段)
这一周线上碰到一个诡异的BUG。线上有个定时任务,这个任务需要查询一个表几天范围内的一些数据做一些处理,每隔十分钟执行一次,直至成功。通过日志发现,从凌晨5:26分开始到5:56任务执行了三次,三次都因为SQL查询超... 查看详情
JNI ERROR (app bug): local reference table overflow (max=512)
...【发布时间】:2014-12-2809:53:32【问题描述】:我正在尝试使用我自己的数据集运行LibSVMAndroidClassificationAndroid项目。它与已经提供的数据集完美配合,当我使用100行的csv(小于原始大小的1%)时,它也能正常工作。但是,当我尝试... 查看详情
Java 性能调优、JNI 内存泄漏
...描述】:我有一个Java应用程序。它是一个Linux平台。我们使用的是Java6。它是普通的sdkjava加上一些JNI。我们使用visualvm来监控内存泄漏。我们注意到visualvm应用程序不会连续消耗堆。但是整个进程的内存一直在增加,直到linux杀死... 查看详情
如何在使用 JNI 的 C++/Java 项目中使用 CRT 中的工具检测内存泄漏?
】如何在使用JNI的C++/Java项目中使用CRT中的工具检测内存泄漏?【英文标题】:HowdoIdetectmemoryleaksusingthetoolsinCRTinaC++/JavaprojectusingJNI?【发布时间】:2012-03-1503:09:01【问题描述】:我已经尝试了几个小时才能让它工作。到目前为止... 查看详情
使用 JNI 在 Java 调用之间将本机对象保存在内存中
】使用JNI在Java调用之间将本机对象保存在内存中【英文标题】:KeepinganativeobjectinmemorybetweencallsfromJavausingJNI【发布时间】:2016-01-1919:09:14【问题描述】:我有一个Android应用,需要使用C库。我正在使用JNI与之交互。该库使用一个... 查看详情
Android : JNI ERROR (app bug): local reference table overflow (max=512)
...中获取特定的值;这个值会定期更新,所以我需要在需要使用的时候获取它。我正在使用JNI从本机代码调用Java代码。std::stringval;JNIEnv*env=J 查看详情
使用 JNI 和 NDK 旋转位图
】使用JNI和NDK旋转位图【英文标题】:RotatingabitmapusingJNI&NDK【发布时间】:2013-01-0203:33:45【问题描述】:背景:我已经决定,由于位图占用大量内存,很容易导致内存不足错误,我将把繁重的、消耗内存的工作放在C/C++代码上... 查看详情
ijkplayer遇到的诡异问题(代码片段)
今天重新封装播放器界面的时候发现了一个诡异的问题。 覆盖在ijkplayer上层的View莫名其妙消失了,View确定已经被addView到了ContentView中,但是视图里就是看不到,debug也确定了被add的View已经有了Parent,a... 查看详情
记录一下max在动画制作中遇到文件大小无限膨胀的bug
...大小,不到6MB 总结一下:这个问题目前只出现在使用了biped,并使用了姿态收集和运动混合器的项目中,我已经和autodesk反映了bug,如果是项目中没有使用到这些组件,那可能是由于其他原因引起,可尝试外网这位大神... 查看详情
pgi遇到的坑
以下记录为本人在使用PGI社区版编译器遇到的问题,包含两类问题1,PGI编译器本身存在你的bug。2,在其他编译器编译运行没问题,在PGI中出现问题。版本(18.11社区版)1,(bug)内置函数,EOSHIFT,当偏移量为0的时候,数组会... 查看详情
面试中被问到你遇到的java编程中的bug你如何解决的
...这个问题我也碰到过几次了,如何解决?需要你对你大量使用的类非常熟悉,最好事先仔细看看文档,有的类需要你最后dispose的,有的类add过后需要remove的,有 查看详情