Помогите понять - утечка памяти?

Discussion in 'WASM.WIN32' started by vovka, Jul 26, 2006.

  1. vovka

    vovka New Member

    Blog Posts:
    0
    Прога на С++ (MSVC++) работает с сетью.
    память выделяется с помощью new!
    Прога каждые 10 сек конектится к серваку чего-то забирает.
    Вроде все созданные var = new char[num] удаляю delete [] var
    Так ведь?!

    Но на в процессах память моего приложения каждые 10 сек растёт на 64К

    Это у меня утечка памяти (т.е. моя вина как программиста) или я нетак понимаю систему!?

    Спасибо!
     
  2. alpet

    alpet Александр

    Blog Posts:
    0
    vovka
    Отладчик рулит - не мешает посмотреть, действительно ли освобождается память.
    По идее MSVS начиная с 2003, сама обнаруживает утечки памяти. Более четкой их локализация становится, если заменить оператор new на макрос DEBUG_NEW.
     
  3. AsmGuru62

    AsmGuru62 Member

    Blog Posts:
    0
    В серверном приложении скорее всего "рулит" лог файл. Отладчик, наоборот может нарушать картину.
     
  4. Son of God

    Son of God New Member

    Blog Posts:
    0
    Посмотри каким-нибудь верифаером, например BoundsChecker.
     
  5. Quantum

    Quantum Паладин дзена

    Blog Posts:
    0
    vovka
    Нужно использовать мультитрединговый CRT. Проверьте в настройках проекта эту опцию.
     
  6. Unhandled_Exception

    Unhandled_Exception New Member

    Blog Posts:
    0
    Попробуй этот плагин:
    http://www.deleaker.com/
     
  7. Ms Rem

    Ms Rem New Member

    Blog Posts:
    0
    vovka
    Вопрос - как часто выделяется/освобождается память. В каких пределах варьируется размер выделяемого блока, и сколько памяти выделяется в максимуме всего.
    При неблагоприятных сочетаниях этих параметров, возможна утечка памяти из за ее фрагментации. И с этим иногда становиться почти невозможно бороться.
     
  8. YoungBastard

    YoungBastard New Member

    Blog Posts:
    0
    vovka

    короче, Вовка, все просто, идешь вот сюда: http://rsdn.ru/article/vcpp/leaks.xml. Читаешь, медитируешь, применяешь свои знания на практике и радуешься... =)

    зы. На практике, всякие там bounds checker и т.д. и п.т. только затрудняют процесс нахождения утечки, т.к. тот же чекер для других нужд расчитан, а разработчики CRT все уже давным давно за нас сделали, просто надо уметь это пользовать. Мне эта статья очень пригодилась
     
  9. Jesus

    Jesus New Member

    Blog Posts:
    0
    delete[] var; var = 0;
     
  10. IceStudent

    IceStudent Active Member

    Blog Posts:
    0
    YoungBastard
    Ну-ну. Так же, как IDE отвлекает от кода своими подсветками, autocomplete'ами и прочими фенечками.
     
  11. varnie

    varnie New Member

    Blog Posts:
    0
    Unhandled_Exception,
    попробовал я этот плагин Deleaker. показал он мне значит утечки памяти в моем проекте. я решил все же докопаться до истины, взял, и прогнал этот плагин при дебаге на другом проекте (взял исходный "нулевой" пример работы с OpenGL, который шел с поставкой DevC++ компилера, который я в своем коде за основу работы с OpenGL взял). и что же вы думаете, Deleaker мне и тут показал утечки памяти!!! причем, всего лишь на одну утечку меньше, если так можно выразиться в этом контексте. в моем проекте он показывал 5 утечек, а здесь 4, причем размер "утекших" данных в четырех утечкам один в один совпадает и с моими.
    я не могу поверить просто, что в том исходном примере, что шел с DevC++ компилером могут быть утечки.
    если угодно, могу приаттачить этот простенький сорец для пущей убедительности.

    YoungBastard,
    попробовал тот способ, описанный по вашему указанному линку, все сделал как там описано, но на вкладке Debug окна Output моей MS Visual Studio .Net 2003 абсолютно ничего не выводится. кто знает, в чем дело?

    ps: пардон за поднятие старой темы
     
  12. wasm_test

    wasm_test wasm test user

    Blog Posts:
    0
    возможно, лучше будет реализовать свой менеджер кучи и самостоятельно следить за всеми аллокациями.