Утечка памяти VB6 - PullRequest
       17

Утечка памяти VB6

1 голос
/ 23 марта 2009

Может ли программа VB6, не содержащая ключевое слово "New", иметь утечки памяти?

Если да, приведите пример.

Ответы [ 6 ]

4 голосов
/ 24 марта 2009

Подводя итог полученным ответам: вызов другого компонента может привести к утечкам памяти. Компонент может содержать ошибки, или вы можете использовать его неправильно. Компонентом может быть OCX или DLL (включая вызовы API в DLL Windows, что является отличным способом утечки памяти и ресурсов Windows, не говоря уже о множестве других волнующих проблем).

И точка педантичности: вы можете создавать объекты, используя CreateObject, чтобы вы могли просочиться в память через циклические ссылки , не используя New. И onedaywhen указал в комментариях, вы также можете создавать циклические ссылки с переменными формы без использования New. Но я думаю, что вопрос в том, могут ли утечки памяти в VB6 иметь другие причины, кроме циклических ссылок.


Ответ рекурсива не вызывает утечку памяти - подсчет ссылок приведет в порядок память при каждом выполнении цикла - см. Мой комментарий к ответу.

3 голосов
/ 23 марта 2009

Возможно, вы вызываете стороннюю DLL-библиотеку с утечками памяти.

2 голосов
/ 23 марта 2009

Да, это возможно. До того, как я узнал об утечке памяти в конкретном вызове Windows API, написанная мною программа VB6, в которой использовались прозрачные блиты, показала утечку памяти. Итак, хотя утечки не было в самой программе, она была в одной из функций, которые VB6 вызывал в Win32 API.

1 голос
/ 23 марта 2009

... и не забывайте утечки памяти в OCXs

0 голосов
/ 25 марта 2009

Что это за одержимость Новым в отношении утечек памяти? Я не вижу никаких отношений, кроме выделения другого объекта путем прикосновения к ссылочной переменной после установки для нее значения Nothing.

Если вы сделаете это, у вас, вероятно, все равно будет логическая ошибка. Если вы не используете New, это значит, что вы взорваны, и вряд ли моя идея «исправить» что-либо.

Наихудшие утечки могут включать в себя вызовы API, подобные тем, что выполняются в подпрограммах OLE или GDI, которые требуют явной очистки / освобождения неявно распределенных структур данных.

Но, как я уже сказал, ассоциирование New с утечками памяти звучит для меня чокнутым.

0 голосов
/ 23 марта 2009

У нас была утечка с использованием глобальных переменных в модуле при работе под COM +. Это было давно, не помню специфику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...