이것은 또 다른 문제입니다. 우선 PicoScope 6에서 내 보낸 정보가 들어있는 레벨 4의 MATLAB 파일을 읽으려고합니다.이 파일은 A, Tstart, Tinterval 및 Length 파일에서 네 개의 배열을 읽습니다. 배열 번호 1은 지금까지 가장 큰 번호이며 1000004 개의 값을 포함하지만 나머지 3 개는 각각 하나의 값만 포함합니다. 아래의 코드를 실행하면 성공적으로 파일을 읽고 다차원 배열에 저장하지만 은 배열을 사용하려고 할 때이 실패합니다.C에서 큰 배열을 사용할 때 EXCEPTION_ACCESS_VIOLATION
#include <jni.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <matio.h>
#include "ReadMatFile.h"
//macros
#define getLength(x) (sizeof(x)/sizeof(x[0]))
//variables
double *dataMatrix[4];
int innerSize[getLength(dataMatrix)];
//functions
jobjectArray convertToArray(JNIEnv *env, double **data, int length1D,
int *length2D);
JNIEXPORT jdoubleArray JNICALL Java_ReadMatFile_readMatFile(JNIEnv *env,
jobject object, jstring str) {
const char *fileName = (*env)->GetStringUTFChars(env, str, 0);
mat_t *matfp;
matvar_t *matvar;
matfp = Mat_Open(fileName, MAT_ACC_RDONLY | MAT_FT_MAT4);
if (NULL == matfp) {
fprintf(stderr, "Error opening MAT file %s\n", fileName);
return NULL;
}
int i = 0;
while (NULL != (matvar = Mat_VarReadNext(matfp))) {
double *data = (double*) (matvar->data);
dataMatrix[i] = data;
innerSize[i] = (int) matvar->nbytes/matvar->data_size;
Mat_VarFree(matvar);
matvar = NULL;
i++;
}
Mat_Close(matfp);
(*env)->ReleaseStringUTFChars(env, str, fileName);
int s;
for(s = 0; s < innerSize[0]; s++)
printf("A[%d] = %e\n", s, dataMatrix[0][s]); /* Fails here */
return NULL;
//return convertToArray(env, dataMatrix, getLength(dataMatrix) ,innerSize);
}
jobjectArray convertToArray(JNIEnv *env, double **data, int length1D,
int *length2D) {
jsize outerSize = (jsize) length1D;
jclass class = (*env)->FindClass(env, "[D");
jobjectArray outer = (*env)->NewObjectArray(env, outerSize, class, 0);
jsize i;
for (i = 0; i < outerSize; i++) {
jsize innerSize = (jsize) length2D[i];
jdoubleArray inner = (*env)->NewDoubleArray(env, innerSize);
(*env)->SetDoubleArrayRegion(env, inner, 0, innerSize, data[i]);
(*env)->SetObjectArrayElement(env, outer, i, inner);
(*env)->DeleteLocalRef(env, inner);
}
return outer;
}
이 원인은 무엇입니까? 이 응용 프로그램을 실행할 때 minidump이 생성됩니다. 배열이 너무 큽니까? 이것에 대한
수정과도 설명 많이 주시면 감사하겠습니다 무엇이 잘못되었는지의!
미리 감사드립니다.
감사합니다. 시도해 보겠습니다. – Linus