Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
konopus

Утечка памяти в jni либе

23.12.2008, 09:22. Показов 1993. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал jni либу. Тестирую под Linux. За 20часов нарастает 200МБ. В Жавовских нитях на верхнем уровне параллельно выполняю тока отправку и прием пакетов. Вот метод, где по всей видимости идет утечка.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/* 
 * Class:     ru_work_jomb_DFFChannel 
 * Method:    CiWrite 
 * Signature: (I[Lru/work/can/CANFrame;II)V 
 */ 
JNIEXPORT jint JNICALL Java_ru_work_jomb_DFFChannel_CiWrite(JNIEnv *env, jclass cl, jint chan, jobjectArray buf, jint off, jint len) { 
 
   if (len <= 0) { 
      return 0; 
   } 
    
   jclass frame_class = env->GetObjectClass(env->GetObjectArrayElement(buf, off)); 
   jfieldID fid_frame_id = env->GetFieldID(frame_class, "id", "I"); 
   jfieldID fid_frame_extendedID = env->GetFieldID(frame_class, "extendedID", "Z"); 
   jfieldID fid_frame_rtr = env->GetFieldID(frame_class, "rtr", "Z"); 
   jfieldID fid_frame_length = env->GetFieldID(frame_class, "length", "I"); 
   jfieldID fid_frame_data = env->GetFieldID(frame_class, "data", "[B"); 
 
   canmsg_t *cmbuf = new canmsg_t[len]; 
    
   for (jsize i = 0; i < len; i++) { 
      jobject frame = env->GetObjectArrayElement(buf, off + i); 
      jint id = env->GetIntField(frame, fid_frame_id); 
      jboolean extendedID = env->GetBooleanField(frame, fid_frame_extendedID); 
      jboolean rtr = env->GetBooleanField(frame, fid_frame_rtr); 
      jint length = env->GetIntField(frame, fid_frame_length); 
      jbyteArray data = (jbyteArray)env->GetObjectField(frame, fid_frame_data); 
       
      canmsg_t *cm = (cmbuf + i); 
      msg_zero(cm); 
      cm->id = (_u32)id; 
      if (extendedID) { 
         msg_seteff(cm); 
      } 
      if (rtr) { 
         msg_setrtr(cm); 
      } 
      cm->len = (_u8)length; 
      env->GetByteArrayRegion(data, 0, length, (jbyte*)cm->data); 
      env->DeleteLocalRef(data); 
      env->DeleteLocalRef(frame); 
   } 
   _s16 errCode = CiWrite((_u8)chan, cmbuf, (_s16)len); 
   delete cmbuf; 
   env->DeleteLocalRef(frame_class); 
 
 
   if (errCode < 0) { 
      ThrowDFFException(env, cl, errCode); 
      return errCode; 
   } 
 
   jint count = errCode; 
   return count; 
}
Помогите советом.

Добавлено через 18 часов 35 минут 40 секунд
проблема решилась сама собой )
во первых, не правильно удалял массив, надо было - delete[] cmbuf;
во вторых, то что было во первых не помогло, проблема осталась, решением оказалось замена динамического массива на статический.
Спасибо за внимание ))
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.12.2008, 09:22
Ответы с готовыми решениями:

В каком либе валяются функции?
В каком либен валяются XDisplayOpen и XScreenOpen (кажется так)? Хотел под эклипсом сделать окнную...

Непонятность в одной граф либе
Мм... Вообщем я даже не знаю как сие явление прокомментировать, хочу нарисовать стрелку - дабы в...

Ошибка линковки LNK2019 при линковке (линкер не видит функцию в либе)
Доброго времени суток! Проблема следующая: есть длл - самопальный враппер над Bullet для Ogre3D....

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.12.2008, 09:22
Помогаю со студенческими работами здесь

Вектор, утечка памяти, функция создания и выделение памяти
Здравствуйте. Есть проблема. функция malloc выделяет память лишь в функции CreateVector(), и при...

Executing Java-code from C++-code via JNI
Всем привет! Убежден, что ошибся с выбором раздела для публикации вопроса, но честно говоря, не...

Qt и JNI вызов java класса
Всем привет, недавно делал Android приложение, использовал Jni. Вроде было не сильно сложно. Сейчас...

Qt C++ Jni. Перехват смс
Здравствуйте, Пытаюсь написать прогу которая будет перехватывать входящие смс от номера ХХХ, только...

Создание JavaVM с помощью C++ JNI, ошибка JNI_EVERSION
Здравствуйте, форумчане. Пытаюсь создать JavaVM из кода на С++ с помощью JNI. Но вот беда...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru