Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выделение памяти в С++ 
V
    Опции темы
vlarry
Дата 9.9.2011, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 16.8.2009

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



Добрый вечер! Доработался наверное, но не могу решить проблему....Есть структура вида
Код

struct ATTRFILE
{
         short attr;
         int     size_file;
         string path;
         unsigned char *data;
{;

и есть список 
Код

list<ATTRFILE> listFiles;
, который передается в функцию, как ссылка
Код

void scanDir(list<ATTRFILE> &listFiles)
{
        ...
        fstream dir("test", ios::in|ios::binary);
        dir.seekg(0, ios::end);
        int sizeFile = dir.tellg();
        dir.seekg(0, ios::beg);
        ATTRFILE file;
        ....
        file.data = new unsigned char[sizeFile];
        dir.read(file.data, sizeFile);
        dir.close();
}

проблема возникла в том, что после вызова функции я считываю информацию из списка и программа падает при выводе данных из data.
проверил строку и увидел там мусор. А внутри функции просматривал, то все нормально строка содержит данные из файла. Как мне выделить память, чтобы при выходе из функции она была валидной?
PM MAIL   Вверх
volatile
Дата 9.9.2011, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

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



Цитата(vlarry @  9.9.2011,  20:40 Найти цитируемый пост)
  ATTRFILE file;

Эта переменная удаляется, при выходе из функции.
По идее ее нужно бы добавить в список, но я этого в коде не увидел...

PM MAIL   Вверх
vlarry
Дата 9.9.2011, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 16.8.2009

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



не дописал чуть...
Код

listFiles.push_back(file);

протупил smile 
как тогда выделить память, чтобы она не удалялась после выхода?
PM MAIL   Вверх
volatile
Дата 9.9.2011, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

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



Цитата(vlarry @  9.9.2011,  21:13 Найти цитируемый пост)
как тогда выделить память, чтобы она не удалялась после выхода? 

а память и не удаляется.

PM MAIL   Вверх
vlarry
Дата 9.9.2011, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 16.8.2009

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



тогда почему в переменной мусор? Указатель на ATTRFILE::data при выходе из функции уничтожается...и получается, что указатель, который сохранен в списке уже указывает на мусор.
PM MAIL   Вверх
volatile
Дата 9.9.2011, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

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



vlarry, недостаточно информации.
В том коде что приведен здесь все должно работать.
если
Цитата(vlarry @  9.9.2011,  20:40 Найти цитируемый пост)
 внутри функции просматривал, то все нормально строка содержит данные из файла


PM MAIL   Вверх
vlarry
Дата 9.9.2011, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 16.8.2009

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



всего кода нет дома, просто встретился с таким поведением программы и не могу понять, что не так...
а то, что локальная переменная удаляется при выходе не играет роли? Они же указывают на один и тот же участок памяти, который освобождается при выходе. Или я что-то неправильно понимаю?
PM MAIL   Вверх
volatile
Дата 9.9.2011, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

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



Цитата(vlarry @  9.9.2011,  22:17 Найти цитируемый пост)
же указывают на один и тот же участок памяти, который освобождается при выходе.

который не освобождается при выходе.

память выделенная с помощью new, удаляется только с помощью delete.

PM MAIL   Вверх
vlarry
Дата 9.9.2011, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 16.8.2009

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



н-да...тогда не пойму какого она возвращает мусор smile 
совсем запуталсяsmile....буду экспериментировать....спасибо за ответы...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




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


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

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