一种EXCEPTION_ACCESS_VIOLATION (0x

2019-07-17  本文已影响0人  愤怒的桑树

在java与c构建多实例的案例中,java中对象保存一个long型成员变量,作为对应c实例的指针,jni层在新建c对象后,将对象指针(64位)转成长整型返回给java成员变量保存。然而在某些情况下,调用c实例的方法会出现ACCESS_VIOLATION,并且在windows上会报错,但在linux上就没问题。经过排查,问题最终定位如下:

jni.h中,关于jlong(java long)的typedef并不是唯一的,在windows上,long总是32位(所以在linux上没问题),所以在jni层将地址转长整型的操作,必须要用__int64long, long int, long long 都不行)保存变量,并返回给java。

上一篇 下一篇

猜你喜欢

热点阅读