Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
REllanium
2 / 2 / 0
Регистрация: 22.07.2011
Сообщений: 9
#1

Куда текёть память или чудеса в решете - C++

25.08.2011, 18:53. Просмотров 1094. Ответов 8
Метки нет (Все метки)

Всем привет. Я начинаю верить в чудеса. Кто нибудь сможет доказать, что их не бывает?)))
Программка занимается периодическим (через каждые 10 секунд) опросом маршрутизатора по протоколу SNMP с помощью библиотеки net-snmp 5.5, при этом получая за каждую итерацию порядка 140 переменных от этого устройства. И вот идёт жуткая утечка памяти. 4 Мб за 18 минут!!! С помощью дебагера определил, что это происходит при обращении к функциям библиотеки netSNMP. (все вызовы функций согласно примеру с оф.сайта)
Поставил софтину под названием C++ Memory Validator, чтобы наконец поймать течь и залатать её!! То, что она показывает - это не передать словами, а только можно смотреть и дивиться (см вложение). Занятая память растёт, неосвобожденной памяти НУЛЬ!! и два нижний показателя тоже смотрите!!
Собстно, кто что скажет?? Хотя бы предположения - куда может деваться память??
0
Миниатюры
Куда текёть память или чудеса в решете  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2011, 18:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Куда текёть память или чудеса в решете (C++):

"Чудеса типа float" или "Куда девалась информация?" - C++
кусок кода: int k=100; float sum=0; for (int i=; i<k; i++) for(int j=1; j<i; j++) sum+=1/(2*j+i) ...

Куда утекает память - C++
Бесполезный код проверяет время работы функции. Память выделяется под массив и высвобождается перед выходом из функции. Тем не...

Резкий выход из проги: куда девается выделенная переменной память? - C++
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int...

Куда поставить cin.get(); или _getch(); ? - C++
Куда нужно поставить cin.get(); или _getch(); - Чтобы шло время посекундно как и должно быть... но высвечивается как-то всё криво.. ...

Куда двигаться в с++ или становление программистом - C++
Всем привет. Немного о себе: закончил колледж, учусь дальше в универе на программиста специальность ПОИТ. Вообщем вопрос у меня такой,...

Какие задания бывают на соревнованиях по программированию или куда стремиться новичку? - C++
Привет. Хотел спросить у знающих гуру какие типы заданий бывают к примеру на Code Jam или соревновании программистов google или microsoft и...

8
Сыроежка
Заблокирован
25.08.2011, 19:02 #2
Цитата Сообщение от REllanium Посмотреть сообщение
Всем привет. Я начинаю верить в чудеса. Кто нибудь сможет доказать, что их не бывает?)))
Программка занимается периодическим (через каждые 10 секунд) опросом маршрутизатора по протоколу SNMP с помощью библиотеки net-snmp 5.5, при этом получая за каждую итерацию порядка 140 переменных от этого устройства. И вот идёт жуткая утечка памяти. 4 Мб за 18 минут!!! С помощью дебагера определил, что это происходит при обращении к функциям библиотеки netSNMP. (все вызовы функций согласно примеру с оф.сайта)
Поставил софтину под названием C++ Memory Validator, чтобы наконец поймать течь и залатать её!! То, что она показывает - это не передать словами, а только можно смотреть и дивиться (см вложение). Занятая память растёт, неосвобожденной памяти НУЛЬ!! и два нижний показателя тоже смотрите!!
Собстно, кто что скажет?? Хотя бы предположения - куда может деваться память??
Я сомневаюсь, что кто-то будет разбираться в вашей картинки. Нужен кто, где у вас происходит, как вы думаете, утечка памяти.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
25.08.2011, 19:19 #3
Шо происходит таки, память без спросу тякёть...
Траааагедия...
1
-=ЮрА=-
Заблокирован
Автор FAQ
25.08.2011, 22:10 #4
Цитата Сообщение от REllanium Посмотреть сообщение
Хотя бы предположения - куда может деваться память??
где-то в программе выделил, а освободить забыл, исходник надобно для анализа...
0
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
26.08.2011, 04:19 #5
Цитата Сообщение от REllanium Посмотреть сообщение
Программка занимается периодическим (через каждые 10 секунд) опросом маршрутизатора по протоколу SNMP с помощью библиотеки net-snmp 5.5, при этом получая за каждую итерацию порядка 140 переменных от этого устройства.
Что с этими переменными дальше происходит?
0
ValeryS
Модератор
6654 / 5063 / 470
Регистрация: 14.02.2011
Сообщений: 16,930
26.08.2011, 04:43 #6
Цитата Сообщение от REllanium Посмотреть сообщение
Я начинаю верить в чудеса.
Я тоже
Цитата Сообщение от REllanium Посмотреть сообщение
Хотя бы предположения - куда может деваться память??
веришь в телепатию

Добавлено через 2 минуты
Цитата Сообщение от REllanium Посмотреть сообщение
Хотя бы предположения - куда может деваться память??
-что произошло с подводной лодкой?
_Она утонула (с)
1
REllanium
2 / 2 / 0
Регистрация: 22.07.2011
Сообщений: 9
26.08.2011, 12:03  [ТС] #7
Хааа!! Поднял лодку!!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void port_reports::updateAll() // обновляет все открытые итемы
{//срабатывает по таймеру=============== либо по кнопке "обновить"
 
    //бежим по ТопЛевелИтемам и смотрим.. если она открыта, то обновляем ее детей
    QTreeWidgetItemIterator it(ui.treeWidget);
    while (*it)
    {
        if ((*it)->isExpanded ()) //если устройство раскрыто в дереве
        {
                 //==============Не удалялись указатели============         
            QList<QTreeWidgetItem *> list=(*it)-> takeChildren (); //удаляем детей
            list.clear(); 
//======================================================
 
            ((DevItem*)(*it))->updateDevItem();//создаем детей
                
        }
        ++it;
    }
    timer->setInterval(ui.spinBox_7->value()*1000);
}
в итоге сделал так и не тякёть больше!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void port_reports::updateAll() // обновляет все открытые итемы
{//срабатывает по таймеру=============== либо по кнопке "обновить"
 
    //бежим по ТопЛевелИтемам и смотрим.. если она открыта, то обновляем ее детей
    QTreeWidgetItemIterator it(ui.treeWidget);
    while (*it)
    {
        if ((*it)->isExpanded ()) //если устройство раскрыто в дереве
        {
            
            DevItem * item = new DevItem(((DevItem*)(*it))->name,((DevItem*)(*it))->ip,((DevItem*)(*it))->community);
            int itemIndex = ui.treeWidget->indexOfTopLevelItem((*it));
            delete (*it);
            
            ui.treeWidget->insertTopLevelItem(itemIndex,item);
            item->updateDevItem();
            item->setExpanded(true);
        }
        ++it;
    }
    timer->setInterval(ui.spinBox_7->value()*1000);
}
Чудес и правда не бывает?? А как же дедушка мороз???
0
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
26.08.2011, 12:35 #8
Цитата Сообщение от REllanium Посмотреть сообщение
QList<QTreeWidgetItem *> list=(*it)-> takeChildren (); //удаляем детей
list.clear();
Неа, не удаляем.

Цитата Сообщение от REllanium Посмотреть сообщение
DevItem * item = new DevItem
Тут возможно опять потечет...
0
REllanium
2 / 2 / 0
Регистрация: 22.07.2011
Сообщений: 9
26.08.2011, 13:05  [ТС] #9
Цитата Сообщение от fasked Посмотреть сообщение
Неа, не удаляем.


Тут возможно опять потечет...
не должно.. DevItem * item при срабатывании ИФа станет уже (*it) и почикается

Не понятно почему C++ Memory Validator на графике выдал, что нет unfreed памяти, а на других графиках, что всё чистится, но при этом используемая память росла
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.08.2011, 13:05
Привет! Вот еще темы с ответами:

Куда деваются одномоментные указатели, или управление памятью в работе с std::string - C++
Здравствуйте! Положим, у нас есть функция, возвращающая строку std::string, выглядящая как-то так: std::string getHome() { ...

Есть 4 потока. После осуществления блокировки барьером, 3 куда-то деваются, куда? (pthreads) - C++
Друзья! Как мог упростил код, вот суть В цикле создаются 4 вспомогательных потока, кадый из которых в цикле же 2 раза выводит свой...

Стек или динамическая память!? - C++
Добрый вечер всем! Прошу ответить на вопрос (ниже приведен код): почему строка &quot;Test!&quot; выводится на экран? Она же не была создана в дин....

Попытка чтения или записи в защищенную память - C++
собственно в проблема в заголовке #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; void...


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

Или воспользуйтесь поиском по форуму:
9
Yandex
Объявления
26.08.2011, 13:05
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru