Пожалуйста подождите

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

30 января 00:21
Рейтинг +00 - +    Эмоции
комментариев: 12
Dioguardi тута запостил проект своей мега-игры.
http://dioguardi.1nsk.ru/blog/post22653.html

Я понимаю, что это на коленке за вечер делано, но.

Есть такая штука как утечка памяти.
ru.wikipedia.org/wiki/Утечка_памяти

В больших проектах для предотвращения проблем с памятью используют smartpointers, самописные или встроенные, неважно.

В коротких программках на коленке достаточно следить, чтобы число вызовов new соответствовало числу вызовов delete.

Плюс если функция возвращает объект, надо в документации к ней почитать, кто должен убить этот объект, ты или не ты.

Так вот, простейшая проверка в исходниках Dioguardi.
Zmei.cpp, строки 223, 305, 317, 333, 471 - операторы new.
Оператора delete в Zmei.cpp нету ни одного.

Это звоночек)))

На вскидку - программист поленился создавать бизнес-объект "Змей", всю логику реализовал в главной форме. Для хранения (x,y)-координат ячеек змея поленился завести структурку типа "Point". В итоге - получили утечку.

ЗЫ. Я как бе нихачу никого тыкать носом, я хачу показать элементарный приём нахождения утечек памяти в коде)

ЗЫЫ. Для больших проектов для быстрого выявления утечек памяти и профилирования, конечно надо использовать профайлеры - типа boundchecker, glowcode, всякие другие, тысячи их.
Метки меток нет

комментарии

К первому непрочитанному 
  • 30 января 2009 | 00:51 (ссылка #469723)
    0 - + Сообщить модератору
    mixnsk
    Не ну хорошо что объяснил парню, но не надо так строго) Утечки памяти один из самых встречаемых багов их находят во всех приложениях, но будем готовить программистов смолоду;)
  • 30 января 2009 | 01:18 (ссылка #469725)
    0 - + Сообщить модератору
    Ага, а приграммисты Java или C# - сейчас дружно гогочут, у них есть GC. ))) Хотя-я-я-я, если работаешь из той же жабы или шарпа с COM или пользуешь PInvoke (JNA или JNI в случае жабы), то тоже запросто можно посадить лик. Так что про проблему ликов - никому не смешно. Добавлено через 10 минут Даааааа, перечитал тута свой последний псот и ужаснулся. :) Не, 1nks - это кошки, сиськи, стихи, отфотошопленные фотки и сортирный юмор. Зря я тута начал со своим этим интеллектом. Запостите сюда кто-нибудь побольше котов и сисек, чтобы придать блогу развлекательный харакер)))
  • 30 января 2009 | 09:38 (ссылка #469727)
    0 - + Сообщить модератору
    аватара
    Чо, самый умный што ле? Чо выпендриваетесь? Чо тычите нам в морду, так сказать, своим интеллектом-то, а? xD
  • 30 января 2009 | 10:17 (ссылка #469733)
    0 - + Сообщить модератору
    ohlomon
    if(i=0) c=new int[10]; else c=new int[5]; ... delete c; И "наоборот" тоже. n new = n delete - оооочень поверхностный критерий.
  • 30 января 2009 | 10:18 (ссылка #469726)
    0 - + Сообщить модератору
    Аватара
    Кстати, Пашук, твоего товарища все же взяли)
  • 30 января 2009 | 11:22 (ссылка #469730)
    0 - + Сообщить модератору
    Барни
    Хех, действительно забыл стирать за собой. Исправил, спасибо что не поленились посмотреть :) А вообще я думаю там еще много разных багов. ) Всех не избежать, к сожалению
  • 30 января 2009 | 11:25 (ссылка #469731)
    0 - + Сообщить модератору
    Барни
    Ладно, и правда красивее будет если классом (структурой) координату задать. Дело пяти минут
  • 30 января 2009 | 12:03 (ссылка #469732)
    0 - + Сообщить модератору
    Барни
    Утечка была около 4 кб/с, при большой скорости змея (чаще проверки) до 30 кб/с и выше Вот еще недоработку нашел - обрисовывается каждый раз все тело при движении. И почему то уже при длине около 30 начинает мигать. Тормозная обрисовка...
    Цитата:
    На вскидку - программист поленился создавать бизнес-объект "Змей", всю логику реализовал в главной форме.
    Наверно, я тупой, но не понял смысла фразы. То есть по-хорошему надо было модульно делать, классы по файлам растащить? Но проект не такой уж большой, классы сугубо специализированные, тем более что часть все же вынесена за главную форму - шаблон списка для хранения координат ячеек змея. Можно было вообще STL конечно задействовать, ну да ладно. Извиняюсь за мультипосты
  • Гость_
    30 января 2009 | 13:13 (ссылка #469722)
    Аватара не загружена
    Цитата:
    n new = n delete - оооочень поверхностный критерий.
    Тут скорее надо становится в строчку с оператором new, и спрашивать себя - "А как я очищаю память от этого new?" Потом искать код очистки. Если не нашёл - добавить.
    Цитата:
    классы по файлам растащить?
    Ну для начала неплохо бы классы вообще создать, неважно, все в одном файле или в разных.
    Цитата:
    И почему то уже при длине около 30 начинает мигать
    Ключевое слово для поиска - DoubleBuffering.
  • 30 января 2009 | 17:28 (ссылка #469729)
    0 - + Сообщить модератору
    аватара
    2Люциф: а почему бы и нет? если ты тупой, ему хочется тебе об этом сообщить.
  • грязно выругалась и написала
    31 января 2009 | 13:32 (ссылка #469724)
    0 - + Сообщить модератору
    прыжок
    он не знал што такое утечка! и упякомэн научил его!
  • 3 февраля 2009 | 20:54 (ссылка #469728)
    0 - + Сообщить модератору
    аватара
    2VzzHobboT, а ты его секретарь? Выражаешь его волю? :)
  • Подписаться