![]() |
|
Модераторы: bsa |
![]()
|
|
| ZC1989 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
Слушайте, замучался искать в чём ошибка, программа у меня работает, всё делает как должна, но в диспетчере видно что раз за разом увеличивается размер памяти.
Программа переодически обновляет данные через интернет. в результате получается 2 массива vector примерно по 1200 эллементов ms_Data. и при каждом обновлении вес программы растёт, на одинаковое колличество примерно, массив я очищаю, перед обновлением, в этот момент вес проги падает грубо с 4000 КБ до 3800 КБ и увеличивается до 4200Кб. и так каждый раз, +200, а должно всё очищаться((
перед вызовом ms_get_users(MYSQL *hMySQL, list<ms_Data> *arr) я очищаю список. но думаю что память растёт только лишь потому что в списке хранятся только указатели на строковые значения и собственно сами строки остаются висеть в памяти...но тогда непонятно как их очистить? пробовал много всяких выриантов с delete, каждый раз вылетала прога(( -------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
ZC1989
Первое что заметил, где вызов mysql_free_result? дальше пока не смотрел, добавь а там видно будет, ибо
Добавлено @ 16:30
зачем нужен этот ужас?? std::map для чего писали? Это сообщение отредактировал(а) azesmcar - 15.4.2010, 16:31 |
||||
|
|||||
| ZC1989 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
мне удобнее с этим классом работать, потому что переодически приходится извлекать элементы списка и работать с ними отдельно.
mysql_free_result где ты говоришь добавить? добавляю прямо в функции. после всего, и программа ничего не отображает, а щас MYSQL_RES *res; должен же очистить после окончания функции -------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
||||
|
||||
| ZC1989 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
я добавил mysql_free_result в самом конце void MySQL_fetch_rowsarr(MYSQL *hMySQL, vector<list<char *>> *Arr) и в итоге таблица с пользователями пуста (точнее я авторизироваться в программе теперь не могу даже) потому что пользователь такой отсутствует
-------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
| ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 3 Всего: 23 |
ZC1989, как я понимаю, нужно не копировать указатели, а пользоваться strcpy. Или еще лучше использовать std::string.
Какой, кстати, библиотекой пользуетесь? Я тоже такую хочу. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
Я ничего ровным счетом о твоей программе не знаю, а вижу часть кода, которая делает непонятно что, выдели неработающий кусок кода в отдельный проект, покажи код и скажи что именно не работает. Очистка результатов запросе ПОСЛЕ их использования на программу никак влиять не должны.
Добавлено @ 16:50 скачай отсюда C:\Program Files\MySQL\include C:\Program Files\MySQL\lib Добавлено @ 16:51
и да кстати .. это скорее всего и есть причина Это сообщение отредактировал(а) azesmcar - 15.4.2010, 16:52 |
|||
|
||||
| ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 3 Всего: 23 |
||||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
||||
|
||||
| ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 3 Всего: 23 |
ZC1989, не можете мне скинуть на e-mail папочки include и lib. Я вам плюсик поставлю
Подлизываюсь) |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
||||
|
||||
| ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 3 Всего: 23 |
azesmcar, благодарю вас.
|
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
ZC1989
Кстати, лучше скачай драйвер для C++, облегчишь себе задачу..там нормально в классах все написано. Добавлено через 3 минуты и 48 секунд ИванМ вообще-то собирался вот эту прислать..видимо случайно не туда кликнул, тут побольше выбора http://www.mysql.com/products/connector/ |
|||
|
||||
| ZC1989 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
azesmcar, проект не маленький и вытащить из него чтото нереально быстро, давай я щас полностью приведу пример свторизации.
(в кратце, получаю с сервера базу с пользователями и запрашиваю логин и пароль, если в базе найден такой человек с таким паролем, то запускается главное окно проги)
если просто приводить более менее основной код, слишком муторно будет... а на счёт того что я передаю ссылки в массив и после делаю clear(); - удаляются ли содежимые этих ссылок? или так и продолжают висеть в памяти? -------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
| ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 3 Всего: 23 |
azesmcar,
|
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
ZC1989,
ИванМ правильно заметил, ты не копируешь данные, ты копируешь указатели..после очистки памяти данные стираются, а указатели остаются, используй std::string, или скачай библиотеку для C++, там поменьше проблем будет. |
|||
|
||||
| bsa |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
|
||||
|
|||||
| ZC1989 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
azesmcar, это лишний гемор, а нельзя что ли стереть всё? циклом или как угодно?
Добавлено через 3 минуты и 6 секунд bsa, по твоему примеру у меня получается наоборот, я хочу удалить x через y -------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
| ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 3 Всего: 23 |
ZC1989, как я понимаю, вы C++ и STL знаете более менее. Поэтому советую пользоваться "умными" указателями auto_ptr, а лучше бустовскими и забыть про кошмар с освобождением памяти. Я лично теперь только так и работаю.
|
|||
|
||||
| ZC1989 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
ИванМ, я попробую это, но вот чисто раде интереса, почему я н могу освободить ту память, учитывая что я могу её вывести в каком угодно виде на экране, даже функция free даёт вылет программы...непонимаю....
Добавлено через 2 минуты и 28 секунд list<ms_Data> ::iterator i_arr; for(i_arr = arrDocs->begin(); i_arr != arrDocs->end(); i_arr++){ if((*i_arr)._type = mst_Folders) free((*i_arr).title); } arrDocs->clear(); -------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
| ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 3 Всего: 23 |
ZC1989, грубо говоря освободить память может только тот, кто ее выделял. Если вы ее не выделяли, то и освободить вы ее не можете. Это не точно, но вашем случае это так.
|
|||
|
||||
| ZC1989 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
аа, ну тогда это более правдопободно...
-------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
| ZC1989 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: нет Всего: 1 |
это сново я...
переделал полностью списики. теперь очищается полностью всё что выделяется и как я думаю это не должно как то влиять на размер программы в памяти. но получается странный эффект: через _CrtMemDumpAllObjectsSince(&_ms); вывожу всю неочищенную память и при закрытии программы - выделенная память полностью очищена, с этим проблем нету. но когда я обновляю список, (в 1400 позиций) размер ехе всё равно ростёт! поставил вывод занятой памяти прямо после очистки массива и наблюдаю такую картину что при каждом обновлении остаются только 11 переменных (как и должно быть) - ничего лишнего не остаётся, но почему тогда прирост в памяти??? может быть это вызвано тем что проект Debug? -------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |