E
ErdyMurphy
Gast
Hallo,
ich habe ein Problem mit einer c++ dll die ich in meinem Java-Programm nutze.
Folgender Programmcode macht Probleme.
JNIEXPORT jfloatArray JNICALL Java_dbLib_ReadBinaryFile_getSpectrum
(JNIEnv *env, jclass jc, jstring file, jlong scan, jint func)
{
//COM-Objekt initialisieren
CoInitialize(NULL);
IDACSpectrumPtr pSpectrum = IDACSpectrumPtr(CLSID_DACSpectrum);
//Javastrings parsen
const char* c_file = env->GetStringUTFChars(file, 0);
jfloatArray outArray;
//benötigte Variablen
VARIANT res;
long peaks;
float *intensities, *masses;
//Anzahl der Datenpunkte bestimmen und Array initialisieren
peaks = getDataPoints(c_file, func, scan);
outArray = env->NewFloatArray((int)peaks*2);
//Daten lesen
pSpectrum->GetSpectrum(c_file, func, 0, scan);
pSpectrum->get_Intensities(&res);
intensities = getData(res);
pSpectrum->get_Masses(&res);
masses = getData(res);
//Daten in ein JavaArray kopieren
env->SetFloatArrayRegion(outArray, 0, peaks, intensities);
env->SetFloatArrayRegion(outArray, peaks, peaks, masses);
//Aufräumen
env->ReleaseStringUTFChars(file, c_file);
delete [] intensities;
delete [] masses;
return outArray;
}
und zwar wenn ich die zwei Zeilen am Ende:
delete [] intensities;
delete [] masses;
auskommentiere und kompiliere dann funbktioniert das Programm.
ansonsten bekomme ich:
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x775a329d, pid=2672, tid=3228
#
# JRE version: 6.0_24-b07
# Java VM: Java HotSpot(TM) Client VM (19.1-b02 mixed mode, sharing windows-x86 )
# Problematic frame:
# C [ntdll.dll+0x3329d]
#
# If you would like to submit a bug report, please visit:
# HotSpot Virtual Machine Error Reporting Page
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
Also ich mache da irgendwas falsch beim Speicherfreiräumen.
Vielleicht kann mir da einer helfen. Weil den Speicher muss ich
aufräumen sonst läuft er mir voll.
Danke schon mal im Vorraus.
ich habe ein Problem mit einer c++ dll die ich in meinem Java-Programm nutze.
Folgender Programmcode macht Probleme.
JNIEXPORT jfloatArray JNICALL Java_dbLib_ReadBinaryFile_getSpectrum
(JNIEnv *env, jclass jc, jstring file, jlong scan, jint func)
{
//COM-Objekt initialisieren
CoInitialize(NULL);
IDACSpectrumPtr pSpectrum = IDACSpectrumPtr(CLSID_DACSpectrum);
//Javastrings parsen
const char* c_file = env->GetStringUTFChars(file, 0);
jfloatArray outArray;
//benötigte Variablen
VARIANT res;
long peaks;
float *intensities, *masses;
//Anzahl der Datenpunkte bestimmen und Array initialisieren
peaks = getDataPoints(c_file, func, scan);
outArray = env->NewFloatArray((int)peaks*2);
//Daten lesen
pSpectrum->GetSpectrum(c_file, func, 0, scan);
pSpectrum->get_Intensities(&res);
intensities = getData(res);
pSpectrum->get_Masses(&res);
masses = getData(res);
//Daten in ein JavaArray kopieren
env->SetFloatArrayRegion(outArray, 0, peaks, intensities);
env->SetFloatArrayRegion(outArray, peaks, peaks, masses);
//Aufräumen
env->ReleaseStringUTFChars(file, c_file);
delete [] intensities;
delete [] masses;
return outArray;
}
und zwar wenn ich die zwei Zeilen am Ende:
delete [] intensities;
delete [] masses;
auskommentiere und kompiliere dann funbktioniert das Programm.
ansonsten bekomme ich:
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x775a329d, pid=2672, tid=3228
#
# JRE version: 6.0_24-b07
# Java VM: Java HotSpot(TM) Client VM (19.1-b02 mixed mode, sharing windows-x86 )
# Problematic frame:
# C [ntdll.dll+0x3329d]
#
# If you would like to submit a bug report, please visit:
# HotSpot Virtual Machine Error Reporting Page
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
Also ich mache da irgendwas falsch beim Speicherfreiräumen.
Vielleicht kann mir da einer helfen. Weil den Speicher muss ich
aufräumen sonst läuft er mir voll.
Danke schon mal im Vorraus.