Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Философский вопрос

6.0K
15 мая 2004 года
Porphirius
19 / / 12.05.2004
В принципе этот вопрос можно было поместить в любой раздел форума....но сюда мне все-таки привычнее :)

скажите, почему в ряде программ допускаются сильные "утечки" памяти.. и чем все это можно объяснить :). В многолисленных факах пишут, что если взял память из кучи- верни назад (new/delete)
(malloc/free) (HeapAlloc/HeapFree). Типа это основная причина утечки памяти. Но неужели армия программеров (профессиональных и не очень :)) не может выполнить эти несложные действия ...наверное..причина все-таки не только в этом.... вот бы и хотелось узнать
319
16 мая 2004 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by Porphirius
В принципе этот вопрос можно было поместить в любой раздел форума....но сюда мне все-таки привычнее :)

скажите, почему в ряде программ допускаются сильные "утечки" памяти.. и чем все это можно объяснить :). В многолисленных факах пишут, что если взял память из кучи- верни назад (new/delete)
(malloc/free) (HeapAlloc/HeapFree). Типа это основная причина утечки памяти. Но неужели армия программеров (профессиональных и не очень :)) не может выполнить эти несложные действия ...наверное..причина все-таки не только в этом.... вот бы и хотелось узнать



Проблема в том, что применение new/delete зависит от контекста. Если вызываешь, например new для создания массива как
int c=new int[5]

а вызываешь delete просто как delete c, то у тебя утечка памяти.
Это только пример.

Иногда ты создаешь объекты в памяти не так явно, как просто вызывая new, тогда можно не заметить этого. например, иногда ты в классе создаешь динамический объект, потом что-то с ним делаешь, создаешь указатели на этот объект, потом удаляешь только первый указатель, а остальные все еще указывают на что-то в памяти... Вобщем причин много может быть.

6.0K
16 мая 2004 года
Porphirius
19 / / 12.05.2004
Цитата:
int c=new int[5]
а вызываешь delete просто как delete c, то у тебя утечка памяти.



Да..это один из классических факовских примеров. Или например:

Type* a = new Type;
Type* b = new Type;
b = a;

Type - произвольный тип
тоге один классических примеров...надеюсь пояснять не стоит :)

Цитата:
В общем причин много может быть.



Это безусловно. Я просто хочу спросить, утечки памяти вызваны лишь некомпетентностью программеров(ни кто не идеален :)), или же может возникнуть ситуация, когда память течет не по вине программера.

2.1K
17 мая 2004 года
cozy
69 / / 11.01.2004
Цитата:
Originally posted by Porphirius

Это безусловно. Я просто хочу спросить, утечки памяти вызваны лишь некомпетентностью программеров(ни кто не идеален :)), или же может возникнуть ситуация, когда память течет не по вине программера.



Все происходит по вине программера. Того или иного ;)

527
17 мая 2004 года
pavor
275 / / 28.09.2003
Цитата:
Originally posted by cozy


Все происходит по вине программера. Того или иного ;)



В серьезных программах обычно происходит из-за сложности в алгоритмах и синхронизации нескольких процессов.

Последние мучения - в контроле ActiveX надо было при вводе символа из-за того, что текст не помещался, отображать полосы прокрутки. Естесственно размеры определяются только в ходе отображения. А при изменении размеров опять вызывается перерисовка. А для перерисовки задействуется битмап. Таким образом два раза выделялась память, а освобождалась 1 раз, на второй - глюк. Что-то вроде
char *p;
p = new char[size];
...
p = new char[size];
...
delete[] p;
delete[] p;
Только не с массивами, а с системными ресурсами.
Исправил - изменял размеры не сразу, а после перерисовки.

6.0K
18 мая 2004 года
Porphirius
19 / / 12.05.2004
Цитата:
Originally posted by cozy


Все происходит по вине программера. Того или иного ;)



Хех... т.е. в принципе память может течь по вине программера, отвечающего за тот или иной фрагмент кода компилера7 и ни в коем случае по вине, скажем, меня ;)

2.1K
18 мая 2004 года
cozy
69 / / 11.01.2004
Цитата:
Originally posted by Porphirius


Хех... т.е. в принципе память может течь по вине программера, отвечающего за тот или иной фрагмент кода компилера7 и ни в коем случае по вине, скажем, меня ;)



О чем я собссно я иговорил ;)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог