2016-06-15 6 views
-2

Я работаю над JNI с языком C. Здесь я создал массив объектов размером 4000. В соответствии с моими требованиями размер массива должен динамически расти. Как я могу распределить память динамически? Я пробовал использовать malloc. Но я не могу этого добиться.Как динамически выделять память для массива объектов JNI

Вот что я пробовал:

OriginalArray = (*env)->NewObjectArray(env, 4000, tradeObject, NULL); 
+0

«Я не могу этого достичь» не является описанием проблемы. – EJP

+0

Я пытаюсь выделить память в первый раз на 20, а затем я пытаюсь перераспределить ее до 40. Но это не работает для меня. Я попробовал следующее: 'jobjectArray tradeOriginalArray *; sizeofhearray = 20; tradeOriginalArray = malloc (sizeofhearray * sizeof (jobjectArray)); sizeofhearray = 40; tradeOriginalArray = realloc (tradeOriginalArray, sizeof (jobjectArray) * sizeofhearray); ' –

+0

Почему, по-вашему, вам нужно использовать JNI для этого? Это было бы утомительной проблемой для того, чтобы кто-то, знакомый с JNI, использовал что-то вроде объекта Java HashSet. Выполнение этого с JNI делает дополнительные усилия, чтобы сделать что-то легкое и ** сделать ** это трудно. –

ответ

1

По моим требованиям размер массива должен динамически растет.

You can't use an array.

An массива это объект-контейнер, который содержит фиксированное число значений одного типа. Длина массива устанавливается, когда создается массив . После создания его длина фиксирована.

Вы должны использовать что-то другое, кроме массива Java, для хранения ваших данных, если его размер должен измениться.

Или вы можете выделить массив каждый раз, когда размер необходимо изменить и скопировать элементы массива из старого массива в новый массив.

+0

Ok. Есть ли способ динамически распределять память в JNI? Я пытаюсь выделить память в первый раз на 20, а затем я пытаюсь перераспределить ее до 40. Но это не работает для меня. Я пробовал следующее: 'jobjectArray tradeOriginalArray = NULL; sizeofthearray = 20; tradeOriginalArray = malloc (sizeofhearray * sizeof (jobjectArray)); sizeofthearray = 40; торговляOriginalArray = realloc (торгOriginalArray, sizeof (jobjectArray) * sizeofhearray); ' –

+0

Управление памятью Java полностью отличается от того, что предоставляется через' malloc() ',' realloc() 'и т. Д. –

+0

Ok. например, выделение памяти указателям на C, можно ли динамически распределять память для массива объектов в JNI? –