Философский вопрос
скажите, почему в ряде программ допускаются сильные "утечки" памяти.. и чем все это можно объяснить :). В многолисленных факах пишут, что если взял память из кучи- верни назад (new/delete)
(malloc/free) (HeapAlloc/HeapFree). Типа это основная причина утечки памяти. Но неужели армия программеров (профессиональных и не очень :)) не может выполнить эти несложные действия ...наверное..причина все-таки не только в этом.... вот бы и хотелось узнать
В принципе этот вопрос можно было поместить в любой раздел форума....но сюда мне все-таки привычнее :)
скажите, почему в ряде программ допускаются сильные "утечки" памяти.. и чем все это можно объяснить :). В многолисленных факах пишут, что если взял память из кучи- верни назад (new/delete)
(malloc/free) (HeapAlloc/HeapFree). Типа это основная причина утечки памяти. Но неужели армия программеров (профессиональных и не очень :)) не может выполнить эти несложные действия ...наверное..причина все-таки не только в этом.... вот бы и хотелось узнать
Проблема в том, что применение new/delete зависит от контекста. Если вызываешь, например new для создания массива как
int c=new int[5]
а вызываешь delete просто как delete c, то у тебя утечка памяти.
Это только пример.
Иногда ты создаешь объекты в памяти не так явно, как просто вызывая new, тогда можно не заметить этого. например, иногда ты в классе создаешь динамический объект, потом что-то с ним делаешь, создаешь указатели на этот объект, потом удаляешь только первый указатель, а остальные все еще указывают на что-то в памяти... Вобщем причин много может быть.
а вызываешь delete просто как delete c, то у тебя утечка памяти.
Да..это один из классических факовских примеров. Или например:
Type* a = new Type;
Type* b = new Type;
b = a;
Type - произвольный тип
тоге один классических примеров...надеюсь пояснять не стоит :)
Это безусловно. Я просто хочу спросить, утечки памяти вызваны лишь некомпетентностью программеров(ни кто не идеален :)), или же может возникнуть ситуация, когда память течет не по вине программера.
Это безусловно. Я просто хочу спросить, утечки памяти вызваны лишь некомпетентностью программеров(ни кто не идеален :)), или же может возникнуть ситуация, когда память течет не по вине программера.
Все происходит по вине программера. Того или иного ;)
Все происходит по вине программера. Того или иного ;)
В серьезных программах обычно происходит из-за сложности в алгоритмах и синхронизации нескольких процессов.
Последние мучения - в контроле ActiveX надо было при вводе символа из-за того, что текст не помещался, отображать полосы прокрутки. Естесственно размеры определяются только в ходе отображения. А при изменении размеров опять вызывается перерисовка. А для перерисовки задействуется битмап. Таким образом два раза выделялась память, а освобождалась 1 раз, на второй - глюк. Что-то вроде
char *p;
p = new char[size];
...
p = new char[size];
...
delete[] p;
delete[] p;
Только не с массивами, а с системными ресурсами.
Исправил - изменял размеры не сразу, а после перерисовки.
Все происходит по вине программера. Того или иного ;)
Хех... т.е. в принципе память может течь по вине программера, отвечающего за тот или иной фрагмент кода компилера7 и ни в коем случае по вине, скажем, меня ;)
Хех... т.е. в принципе память может течь по вине программера, отвечающего за тот или иной фрагмент кода компилера7 и ни в коем случае по вине, скажем, меня ;)
О чем я собссно я иговорил ;)