| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Динамическое выделение памяти |
| Автор: MAXIQ 25.2.2009, 02:46 | ||||
| Здравствуйте, вопрос в следующем есть ли утечка памяти в этом примере? И как ее избежать, если есть, на Ваш взгляд? (Обработчик Button3Click) .h
.cpp
|
| Автор: Artemon 26.2.2009, 08:05 |
| Указатель на пямять, хранящийся в элементе массива p[i] - остается в памяти до выхода из программы. Чтобы отслеживать подобные ситуации поставь в свойствах проекта галочку Code Guard и он тебе покажет где у тебя не освобождается память. |
| Автор: MAXIQ 26.2.2009, 18:03 |
| Хороший знак, Code Guard молчит, возмущается только после того, как я создал объект через new и не удалил его спецом)). Однако, чтоб снять у меня все сомнения может кто сказать что с блоком памяти на который указывал p[i] происходит, указатель на него, хранившийся ранее переписан на следующий, то есть обратиться уже нельзя, но блок то вроде остался? Или он будет заполнен если системе понадобится память так как память перемещаемая (флаг HGND)?? |
| Автор: Artemon 26.2.2009, 18:35 |
| Конечно останется, получится блок потерянной памяти. |
| Автор: Vyacheslav 26.2.2009, 19:09 | ||
| У Вас указатель один. Выделенныя память предстваляет массив байтов размером sizeof(MyStruct)*iSchet Вот это
будет просто означать побитное копирование одной стркутуры в другую. Память в данном случе не теряется. Вопрос в другом. Нафига такие сложности и переход от С++ к С? Почему просто нельзя было решить этот вопрос с помощью new? |
| Автор: Artemon 27.2.2009, 09:24 |
| Да действительно память выделяется сразу целому блоку, но меня смутила переменная iSchet, при уменьшении которой мы просто не сможем узнать начальный размер массива. Но опятьже упустил из внимания тот факт, что при уменьшении iSchet - мы перераспределяем память. |
| Автор: MAXIQ 27.2.2009, 10:31 |
| Нафига: 1. Структур может быть много. 2. Структуры довольно большие (в коде просто пример, дабы не загружать лишним) 3. Для учебных целей))) На основании выше сказанного память решил делать перемещаемую. Спасибо всем, очень помогли. P.S. Вячеслав, а пример с new, чтоб были реализованы добавление, просмотр, удаление можешь сделать? Тогда тему можно считать полностью исчерпаной и мечу вопрос как решенный. |
| Автор: math64 27.2.2009, 11:02 | ||
|
| Автор: MAXIQ 28.2.2009, 14:09 |
| ОК. Спасибо. |