1. C++ / Говнокод #2122

    +68.4

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    char rc;
    ...
    bool ResourceManager()
    {
    	static TResourceRC r;
    	...
    	delete r;
    	...
    	r=new TResourceRC(rc);
    	...
    	return true;
    	assert(false);
    };
    ...

    От предков проект достался. Я думал, чего он переодически необьяснимо глючит...
    ResourceManager() - вызываеться регулярно в цикле.

    Запостил: Говногость, 11 Ноября 2009

    Комментарии (13) RSS

    • Знатно, знатно... Только судя по коду должно быть static TResourceRC *r ?
      Ответить
      • Да. Удалил случайно.
        Ответить
      • Собственно, это из игры казуалки. Вызываеться регулярно, каждый кадр. Получаеться первый раз delete r; срабатывает не верно.
        Ответить
    • assert(false); - после return.
      Ответить
    • static TResourceRC *r;
      статические переменные инициализируются "0" если не указано.
      Область видимости при этом не важна. delete 0 выполняется без проблем.
      Где говнокод? ассерт за return???
      Ответить
      • Да? Значит там у меня периодически бывает не нуль. Порча памяти?
        Ответить
        • Нуль там может быть только один раз -- после старта программы.
          Потом _никогда_.
          Если там периодически нуль возникает то налицо порча.
          У тебя судя по всему наведённая бага, этот код ни при чём.
          Ответить
      • Да. Есть ассерт за ретурном.
        Ответить
    • Тут ещё в bool возращаеться из функции всегда true, хотя никогда не проверяеться.
      Использвали бы void, раз такое дело...
      Ответить
    • в дебаге r будет 0xCDCDCDCD
      Ответить
      • Куча может при этом портиться, если запускать не из отладчика?
        Ответить
        • вообще-то это невалидный адрес, при обращении к нему будет исключение (должно быть)...
          Ответить
        • черт, вопрос не сразу понял... если не из отладчика, там может быть все что угодно, но в 99% случаев будет 0...
          Ответить

    Добавить комментарий