Освобождение динамической памяти...
Например программа выполниоа задачу и вызвала функцию для очищения динамической памяти ????
Не подскажите, есть ли функция, для освобождения динамической памяти сразу всей, которую использует программа?
Например программа выполниоа задачу и вызвала функцию для очищения динамической памяти ????
Вообще-то, это задача операционной системы.
Вообще-то, это задача операционной системы.
Я думаю чел хочет освободить память во время работы программы, и не отключая прогу сново заполнять...
Если б конешно он понимал немного, что если освободить все то он освободит и себя, и произойдет вылет, то не задавал таких вопросов.
ИМХО ему лень
for...
delete i[k];
}
У него в задаче память заполняется и ему лень удалять каждый элемент отдельно.
Есть такая вещь как "куча".
Итак: GetProsessHeap() - куча которую используют new и malloc.
HeapCreate(...) - создаем новую кучу.
HeapDestroy(...) - уничтожаем созданную кучу (только не кучу процесса!).
Вся память выделенная в куче освобождается одним вызовом HeapDestroy(...), даже если она была потеряна. Т.е. это то, что хочет сделать чел.
ИМХО ему лень
for...
delete i[k];
}
У него в задаче память заполняется и ему лень удалять каждый элемент отдельно.
Вообще-то для динамических массивов память освобождается delete[] без указания размерности массива.
Но! Только для одного массива из всей кучи процесса.
Гыг! Присмотрелся я к твоему посту и чего-то недопонял:
Вообще-то для динамических массивов память освобождается delete[] без указания размерности массива.
Но! Только для одного массива из всей кучи процесса.
Ну вот опять меня никто не понел(
У меня под k просто подразумевался TList и нечто подобное...
Ну вот опять меня никто не понел(
У меня под k просто подразумевался TList и нечто подобное...
Для этого и был введен delete - что бы можно было удалять объекты. Иначе в чем было бы его отличие от free()?
Для этого и был введен delete - что бы можно было удалять объекты. Иначе в чем было бы его отличие от free()?
Не понимаю к чему спор?
Я же и говорил
delete k....:D :)
даже если она была потеряна.
Что бы это значило?
Вообще-то для динамических массивов память освобождается delete[] без указания размерности массива.
Для этого и был введен delete - что бы можно было удалять объекты.
В примере 3D Bob, он удаляет не массив объектов, а объекты, указатели на которые в массиве хранятся, так что delete[] в его примере не поможет.
Не понимаю к чему спор?
Я же и говорил
delete k....:D :)
Меня колбасит :)
Что бы это значило?
Возможно некорректно выразился. Подразумевалось, что если для какого либо объекта (переменной) была выделена память через HeapAlloc, и не освобождена через HeapFree, то при HeapDestroy она будет освобождена в любом случае.
В примере 3D Bob, он удаляет не массив объектов, а объекты, указатели на которые в массиве хранятся, так что delete[] в его примере не поможет.
В общем - вы поняли, а главное что я понял.
... если для какого либо объекта (переменной) была выделена память через HeapAlloc, и не освобождена через HeapFree, то при HeapDestroy она будет освобождена в любом случае.
Боюсь что HeapDestroy - не выход из положения. Если так халатно относится к менеджменту хипа, то ОС, пожалуй, вас опередит.
Боюсь что HeapDestroy - не выход из положения.
У меня нет слов, только MSDN. Обратите внимание на Remarks.
Если так халатно относится к менеджменту хипа, то ОС, пожалуй, вас опередит.
Интересно, как? Если у вас еще не завершен процесс?
У меня нет слов, только MSDN. Обратите внимание на Remarks.
Интересно, как? Если у вас еще не завершен процесс?
MSDN и C++ Builder вещи на мой взгляд несовместимые =(, т.к. в MSDN написано одно, в билдере делается другое...
Я просто в программе использую
IHTMLDocument2
IHTMLWindow2
IHTMLFramesCollection2
IDispatch
И выходит так, что програ начинает работу все нормально, и потихоньку начинает кушать память...
Кушает и кушает... Хочется чтобы отработанную память возвращало в среду =). Я просто думал что есть какая-нить хитрая функция, которая позволяет... грубо говоря вернуть программу в момент ее запуска без выхода из проги.
Насчет очищения динамической памяти после завершения работы программы это я знаю =).
MSDN и C++ Builder вещи на мой взгляд несовместимые =(
Пять баллов! :D
Я бы ещё добавил: "... когда пишешь под линукс"
Я просто в программе использую
IHTMLDocument2
IHTMLWindow2
IHTMLFramesCollection2
IDispatch
Ну так покажи, как используешь.
Сдается мне, ты не юзаешь смарт-поинтеры.
MSDN и C++ Builder вещи на мой взгляд несовместимые =(, т.к. в MSDN написано одно, в билдере делается другое...
Я просто упал со стула...
Мои дальнейшие комментарии к этому человеку и ответы на его вопросы пропадают.
Я просто упал со стула...
Мои дальнейшие комментарии к этому человеку и ответы на его вопросы пропадают.
Не принимай так близко к сердцу.
Человек видимо просто растроен, что "не все так гладко в датском королевстве".
MSDN и C++ Builder вещи на мой взгляд несовместимые =(, т.к. в MSDN написано одно, в билдере делается другое...
Ну-у-у-у Ты погорячился. Пример приведи где "в MSDN написано одно, в билдере делается другое"...
Я просто в программе использую
IHTMLDocument2
IHTMLWindow2
IHTMLFramesCollection2
IDispatch
1. Если используешь указатели на интерфейс, то надо делать Release(); или используй смарт-поинтеры ((С) Green )CComPtr, CComQIPtr из ATL или "родные" типа TComInterface.
2. Отсюда: http://forum.codenet.ru/showthread.php?s=&threadid=25567
pScript->AddRef();
Ты получаешь интефейс, зачем ->AddRef()? get_Script наверняка вызывает AddRef(), у тебя счетчик ссылок инкрементируется дважды даже если делаешь Release()(полный код не видел) СОМ-ик остается залоченным и висит в памяти.
3. Приводи полный код, Я не спец. но народу-то здесь грамотного много помогут.
Я просто упал со стула...
Мои дальнейшие комментарии к этому человеку и ответы на его вопросы пропадают.
Ты на свои посты посмотри ...
Ты на свои посты посмотри ...
Посмотрел.
Посмотрел.
Со стула не упал?:)
Со стула не упал?:)
Он даже сломался.
Он даже сломался.
Ну я к тому, что не надо так жестко, уровень то у всех разный. Может человек 4ето не допонимает, поэтому и спрашивает иногда глупости получаются. Ты же не сразу умным родился?
Ты же не сразу умным родился?
Человек рождается умным, если только не олигофрен. А вот знания - дело наживное и зависит от правильного приложения природной лени.
Человек рождается умным, если только не олигофрен. А вот знания - дело наживное и зависит от правильного приложения природной лени.
Можно подытожить ветку: "Лень - двигатель прогресса".