![]() |
|
|
![]()
|
|
| MAXIQ |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 30.12.2006 Репутация: нет Всего: нет |
Здравствуйте, вопрос в следующем есть ли утечка памяти в этом примере? И как ее избежать, если есть, на Ваш взгляд? (Обработчик Button3Click)
.h
.cpp
|
||||
|
|||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 7 Всего: 20 |
Указатель на пямять, хранящийся в элементе массива p[i] - остается в памяти до выхода из программы.
Чтобы отслеживать подобные ситуации поставь в свойствах проекта галочку Code Guard и он тебе покажет где у тебя не освобождается память. -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| MAXIQ |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 30.12.2006 Репутация: нет Всего: нет |
Хороший знак, Code Guard молчит, возмущается только после того, как я создал объект через new и не удалил его спецом)). Однако, чтоб снять у меня все сомнения может кто сказать что с блоком памяти на который указывал p[i] происходит, указатель на него, хранившийся ранее переписан на следующий, то есть обратиться уже нельзя, но блок то вроде остался? Или он будет заполнен если системе понадобится память так как память перемещаемая (флаг HGND)??
|
|||
|
||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 7 Всего: 20 |
Конечно останется, получится блок потерянной памяти.
Это сообщение отредактировал(а) Artemon - 26.2.2009, 18:38 -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
У Вас указатель один. Выделенныя память предстваляет массив байтов размером sizeof(MyStruct)*iSchet
Вот это
будет просто означать побитное копирование одной стркутуры в другую. Память в данном случе не теряется. Вопрос в другом. Нафига такие сложности и переход от С++ к С? Почему просто нельзя было решить этот вопрос с помощью new? -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 7 Всего: 20 |
Да действительно память выделяется сразу целому блоку, но меня смутила переменная iSchet, при уменьшении которой мы просто не сможем узнать начальный размер массива.
Но опятьже упустил из внимания тот факт, что при уменьшении iSchet - мы перераспределяем память. -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| MAXIQ |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 30.12.2006 Репутация: нет Всего: нет |
Нафига:
1. Структур может быть много. 2. Структуры довольно большие (в коде просто пример, дабы не загружать лишним) 3. Для учебных целей))) На основании выше сказанного память решил делать перемещаемую. Спасибо всем, очень помогли. P.S. Вячеслав, а пример с new, чтоб были реализованы добавление, просмотр, удаление можешь сделать? Тогда тему можно считать полностью исчерпаной и мечу вопрос как решенный. |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 4 Всего: 72 |
|
|||
|
||||
| MAXIQ |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 30.12.2006 Репутация: нет Всего: нет |
ОК. Спасибо.
|
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |