Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> правильно освободить память 
:(
    Опции темы
Incinerated
Дата 15.12.2010, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 18.5.2006
Где: Беларусь, Новопол оцк

Репутация: нет
Всего: нет



Проект c++/cli
есть класс:
Код

[Serializable]
public ref class sFile
{
public:
private:    
    String^ m_extension;
    String^ m_place;
    String^ m_name;
public:
    sFile(String^ place, String^ name, String^ ext);
};

[Serializable]
public ref class sDir
{
private:
    List<sFile^> ^m_files;
    List<sDir^> ^m_dirs;
    String^ m_place;
    String^ m_name;
public:
    sDir(String^ place, String^ name);
};

[Serializable]
public ref class sDrive
{
private:
    List<sFile^> ^m_files;
    List<sDir^> ^m_dirs;
    String^ m_name;
public:    
    sDrive(String^ name);
};

public ref class MySearch 
{
private:
    List<sDrive^> ^drives;
public:    
    MySearch(String^ pathToDb);
    ~MySearch();
};

т.е. у меня где то по коду создается экземпляр gcnew MySearch, дальше по коду создается gcnew List<sDrive^> и так далее, создается куча объектов, а в этих объектах создаются gcnew String, так вот, в конце работы программы, выделенной памяти получается под 300 Mb, я рекурсивно вроде освобождаю память в деструкторе MySearch, но что то ничего не освобождается.... как было 300 Mb, так и остается. Вот как я удаляю:
Код

void MySearch::FreeAllMemory(List<sDir^> ^Dirs)
{    
    List<sDir^>::Enumerator ^it_dir = Dirs->GetEnumerator();
    while (it_dir->MoveNext())
    {
        if (it_dir->Current->GetFiles())
            delete[] it_dir->Current->GetFiles();
        if (it_dir->Current->GetDirs()->Count > 0){
            FreeAllMemory(it_dir->Current->GetDirs());
            delete[] it_dir->Current->GetDirs();
        }
    }
}

    

MySearch::~MySearch()
{
    List<sDrive^>::Enumerator ^it_drive = drives->GetEnumerator();
    while (it_drive->MoveNext())
    {        
        if (it_drive->Current->GetFiles())
            delete[] it_drive->Current->GetFiles();
        if (it_drive->Current->GetDirs()){
            FreeAllMemory(it_drive->Current->GetDirs());
            delete[] it_drive->Current->GetDirs();
        }

    }    
    delete[] drives;
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0670 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.