Tôi đã sao chép mảng đa chiều từ java, nhưng tôi đang gặp một số vấn đề để giải phóng bộ nhớ sau khi sử dụng nó.Không thêm được bảng tham chiếu mảng được ghim JNI (1024 mục)
những gì tôi đã làm là:
jfieldID h_valID = (*env)->GetFieldID(env, h_cls, "val", "[[I");
jobjectArray h_val_obj = (*env)->GetObjectField(env, h, h_valID);
int h_val_local[xdim][ydim];
for(i=0; i<xdim; i++)
{
h_val_one_dim = (jintArray) (*env)->GetObjectArrayElement(env, h_val_obj, i);
h_val_elem = (*env)->GetIntArrayElements(env, h_val_one_dim, 0);
for(j=0; j<ydim; j++)
{
h_val_local[i][j] = h_val_elem[j];
}
(*env)->ReleaseIntArrayElements(env, h_val_one_dim, h_val_elem, 0);
(*env)->DeleteLocalRef(env, h_val_one_dim);
}
(*env)->DeleteLocalRef(env, h_val_obj);
tôi có thêm 4 mảng trên phương pháp đó, tất cả trên các thông số, tôi nhận được con trỏ sau đó phát hành sau khi sử dụng nó.
int *x = (*env)->GetIntArrayElements(env,x_p,0);
int *y = (*env)->GetIntArrayElements(env,y_p,0);
int *v = (*env)->GetIntArrayElements(env,v_p,0);
int *w = (*env)->GetIntArrayElements(env,w_p,0);
...
(*env)->ReleaseIntArrayElements(env, x_p, x, 0);
(*env)->ReleaseIntArrayElements(env, y_p, y, 0);
(*env)->ReleaseIntArrayElements(env, v_p, v, 0);
(*env)->ReleaseIntArrayElements(env, w_p, w, 0);
Đối với các file lớn hơn, tôi nhận được tràn trên bảng tham chiếu. Những gì tôi quên để miễn phí hoặc làm thế nào để tôi sửa lỗi này?
Log:
10-02 14: 18: 58,885: W/dalvikvm (23.598): tràn ReferenceTable (max = 1024)
10-02 14: 18: 58,885: W/dalvikvm (23.598): Bài 10 mục trong gắn bảng tham chiếu mảng JNI:
10-02 14: 18: 58,885: W/dalvikvm (23.598): 1014: 0x46109fe8 cls = [I (24 byte)
10-02 14: 18: 58.885: W/dalvikvm (23598): 1015: 0x4610a008 cls = [I (24 byte)
10-02 14: 18: 58,885: W/dalvikvm (23.598): 1016: 0x46109fa8 cls = [I (24 byte)
10-02 14: 18: 58,885: W/dalvikvm (23.598) : 1017: 0x46109fc8 cls = [I (24 byte)
10-02 14: 18: 58,885: W/dalvikvm (23.598): 1018: 0x46109fe8 cls = [I (24 byte)
10-02 14: 18: 58.885: W/dalvikvm (23598): 1019: 0x4610a008 cls = [I (24 byte)
10-02 14: 18: 58.885: W/dalvikvm (23598): 1020: 0x46109fa8 cls = [ I (24 byte)
10-02 14: 18: 58,885: W/dalvikvm (23.598): 1021: 0x46109fc8 cls = [I (24 byte)
10-02 14: 18: 58,885: W/dalvikvm (23.598): 1022: 0x46109fe8 cls = [I (24 byte)
10-02 14: 18: 58,885: W/dalvikvm (23.598): 1023: 0x4610a008 cls = [I (24 byte)
10-02 14 : 18: 58.885: W/dalvikvm (23598): JNI đã ghim bảng tóm tắt tham chiếu mảng (1024 mục):
10-02 14: 18: 58.885: W/dalvikvm (23598): 1024 của [I 24B (4 duy nhất)
10-02 14: 18: 58.885: W/dalvikvm (23598): Bộ nhớ được lưu trữ trực tiếp bởi các tham chiếu được theo dõi là 96 byte
10-02 14:18:58.885: E/dalvikvm (23.598): Không thể thêm vào JNI gắn bảng mảng ref (1024 mục)
thx
Cảm ơn câu trả lời của bạn, nhưng tôi phát hiện ra rằng vấn đề không nằm trong phần mà tôi đã đăng ở trên. – Deadlock