Войти
ПроектыФорумОцените

MyGUI v3.0.1 Released! [updated 12.02.10] (9 стр)

Страницы: 16 7 8 9 10 11 Следующая »
#120
17:19, 22 сен 2011

Люди! Кто нибудь решал проблему с тем, что почти пустой проект

    gui_platform = new MyGUI::DirectXPlatform();
    gui_platform->initialise(DXUT::pd3dDevice, dir_root->makeName("MyGUI.log"));
    gui_platform->getDataManagerPtr()->addResourceLocation(dir_db->makeName("gui"), false);
    gui = new MyGUI::Gui();
    gui->initialise("core.xml", dir_root->makeName("MyGUI.log"));

    gui->shutdown();
    delete gui;
    gui_platform->shutdown();
    delete gui_platform;

На Студийном меморилик детекторе выбрасывает целую портянку утечек?

#121
17:31, 22 сен 2011

не спец в плюсах.. но мб в деструкторе что не очищается)

#122
17:32, 22 сен 2011

vj_antonio
Неа. Утечек нету, VLD говорит. Видимо там что то отчищается после вывода лога.

#123
17:51, 22 сен 2011

А! Я нашел решение. Проблема в рендере ДХ.
Там в строке
IDataStream* DirectXDataManager::getData(const std::string& _name)
...
std::ifstream* stream = new std::ifstream();
течет.

#124
13:01, 26 сен 2011

Это Вы детектором определили, или по коду? Если есть возможность попробуйте поставьте брейкпоинт на аллокацию, которая утекает. Я сейчас проверил код - там достаточно нетривиальная логика, но корректная.
-Eugene-
> А! Я нашел решение. Проблема в рендере ДХ.
Так решение, или все-таки источник проблемы нашли?

#125
15:17, 26 сен 2011

Altren
Утекает выделение памяти для ifstream. (см 123)
Я решил проблему помещением всех созданных потоков в вектор и добавлением функции, которая почистит закрытые потоки.

#126
16:00, 26 сен 2011

да, течет

#127
16:03, 26 сен 2011

так, по коду подразумеваеться что пользоватлеь удалит все что возвращает

IDataStream* DataManager::getData(const std::string& _name);

внутри гуя мы так и делаем

#128
18:55, 26 сен 2011

my.name
Деструктор IDataStream не удаляет поток, который в него передали, а только закрывает.

#129
18:59, 26 сен 2011

IDataStream  это интерфейс, смотри класс который его реализует и увидишь там удаление =)

#130
19:00, 26 сен 2011

посмотри код
DataManager::getData
и какой тип там реально создаеться и посомтри деструктор этого типа

#131
19:00, 26 сен 2011

ой сори, код
IDataStream* DirectXDataManager::getData(const std::string& _name)

#132
0:02, 27 сен 2011

my.name, так а что там со скин-едитором-то? Планируется ли нормальная версия или хотя бы хелп к текущей версии?

#133
12:36, 27 сен 2011

хелп планируется

#134
13:20, 27 сен 2011
  
class MYGUI_EXPORT DataFileStream : public DataStream
  {
  public:
    DataFileStream();
    DataFileStream(std::ifstream* _stream);
    ~DataFileStream();

  private:
    std::ifstream* mFileStream;
  };
  DataFileStream::~DataFileStream()
  {
    if (mFileStream != nullptr)
    {
      mFileStream->close();
      mFileStream = nullptr;
    }
  }
MyGUI_DirectXDataManager.cpp:
IDataStream* DirectXDataManager::getData(const std::string& _name) 
{
    std::string filepath = getDataPath(_name);
    if (filepath.empty())
      return nullptr;

    std::ifstream* stream = new std::ifstream();
    stream->open(filepath.c_str(), std::ios_base::binary);

    if (!stream->is_open())
    {
      delete stream;
      return nullptr;
    }

    DataFileStream* data = new DataFileStream(stream);
    return data;
}

В случае успешного открытия stream нигде не удаляется. Так что лучше не спорить, а признать утечку, VLD ругается именно на
std::ifstream* stream = new std::ifstream();

Страницы: 16 7 8 9 10 11 Следующая »
ПроектыФорумОцените

Тема в архиве.