導致崩潰我在C自定義DLL與一個本地功能如此簡單:JNI與本地方法的malloc()在Cygwin
void Java_main_Main_testMalloc(JNIEnv *env){
char *c = malloc(sizeof(char)*5);
}
Java裏面:
package main;
public class Main {
public static void main(String[] args){
System.loadLibrary("libJNI_test1");
Main m = new Main();
}
public Main(){
testMalloc();
}
native void testMalloc();
}
Main:
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000018011ae47, pid=8604, tid=5464
#
# JRE version: Java(TM) SE Runtime Environment (8.0_05-b13) (build 1.8.0_05-b13)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.5-b02 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# C [cygwin1.dll+0xdae47]
這被剝離版本,當然。但是我確定它由於我所做的所有測試而在malloc()上崩潰。只需註釋掉malloc,編譯DLL就可以了。崩潰致命錯誤:EXCEPTION_ACCESS_VIOLATION(0xc0000005)。有時它運行良好,有時候它會停留在Java調用本地方法的地方......我做錯了什麼?我如何分配本地內存,我將暫時用作緩衝區或w/e?
那不是'javah'生成的確切的方法調用嗎?你也應該有一個'jobject'通過。 –
@AndrewHenle,根據JNI的說法,我必須默認JNIEnv和jobject。無論如何,問題仍然存在。我試圖用C++編譯器完全做同樣的事情,把malloc()換成新的char [5]。它有效,沒有問題。 – user2092119
所以你沒有正確定義你的方法,你想知道爲什麼它不能正確工作? –