Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
JohnyKnoxwille
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 4
#1

Динамическим выделением памяти для буфера по объёму файла - C++

08.05.2012, 18:44. Просмотров 988. Ответов 7
Метки нет (Все метки)

Ув. форумчане,
Вот кусок злосчастного кода:
C++
1
2
3
4
5
in.seekg (0, ios::end); // Позиционируемся в конец файла
unsigned long   len_file = in.tellg(); // Узнаём позицию (= длина файла)
in.seekg (0, ios::beg); // Позиционируемся обратно в начало
char *buffer = new char(len_file);  // Выделяем буфер в памяти под содержимое файла
in.read(buffer,len_file);       // Считываем в буфер
Название: trace.jpg
Просмотров: 119

Размер: 12.2 Кб

Из этого видно, что объем файла 116 (2)
а динамически выделяется только 7 (4)
что вызывает переполнение (5)
Писал в Embarcadero Rad Studio.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2012, 18:44
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Динамическим выделением памяти для буфера по объёму файла (C++):

Двумерный массив с динамическим выделением памяти
Помогите пожалуйста вставить вот в эту вот задачу динамическое выделение...

Описать класс Строка с динамическим выделением памяти
Помогите Описать класс Строка с динамическим выделением памяти и к этому...

Не могу найти ошибку в коде с динамическим выделением памяти
Делаю класс "вектор". Вот код, вроде бы всё нормально, но почему-то всё...

Шаблонный класс. Создание экземпляра класса с динамическим выделением памяти
Вопрос Как задать экземпляра шаблонного класса с динамическим выделением...

Динамическое выделением памяти для массивов
Даны три массива вещественных чисел X(25), B(30), Y(25). Из исходных массивов ...

Конструктор с выделением памяти
Среди всех данных есть указатель, память для которого выделяется в...

7
Игорь с++
472 / 464 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
08.05.2012, 19:00 #2
если ты делаеш для .txt то можно вот так -
C++
1
2
3
4
hFile=CreateFile("a.txt",GENERIC_READ, FILE_SHARE_READ,NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
BufSize = GetFileSize(hFile, NULL);
ReadFile(hFile,Buffer,BufSize,&dwBytes,NULL);
CloseHandle(hFile);
0
JohnyKnoxwille
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 4
08.05.2012, 19:05  [ТС] #3
Проблема в типе
C++
1
2
3
4
5
in.seekg (0, ios::end); // Позиционируемся в конец файла
int  len_file = in.tellg(); // Узнаём позицию (= длина файла)
in.seekg (0, ios::beg); // Позиционируемся обратно в начало
char *buffer = new char(len_file);  // Выделяем буфер в памяти под содержимое файла
in.read(buffer,len_file);       // Считываем в буфер
Если использовать int(2) то все нормально выделяется, но инта мало для объема файла.

Игорь с++, файл может быть любым, суть не в этом. Объем файла вычисляется правильно, но как я понял, new char() не воспринимает unsigned long в качестве аргумента
0
OstapBender
584 / 523 / 75
Регистрация: 22.03.2011
Сообщений: 1,585
08.05.2012, 19:07 #4
во 1 (len_file) - в квадратные скобки
0
Игорь с++
472 / 464 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
08.05.2012, 19:08 #5
вот код который выделяет нужную нам память под текстовый документ
C++
1
2
3
4
5
6
7
8
9
10
11
HANDLE hFile;
DWORD dwBytes=0;static int BufSize=0;
    static char Buffer[100]={0};
    switch (message)                  /* handle the messages */
    {
case WM_CREATE:
hFile=CreateFile("a.txt",GENERIC_READ, FILE_SHARE_READ,NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
BufSize = GetFileSize(hFile, NULL);
ReadFile(hFile,Buffer,BufSize,&dwBytes,NULL);
CloseHandle(hFile);
MessageBox(hwnd,Buffer,"",MB_OK);
Удачи!!!
0
JohnyKnoxwille
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 4
08.05.2012, 19:10  [ТС] #6
Спасибо всем) Разобрался.

unsigned long int len_file; //
0
OstapBender
584 / 523 / 75
Регистрация: 22.03.2011
Сообщений: 1,585
08.05.2012, 19:17 #7
и че изменилось?
0
JohnyKnoxwille
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 4
08.05.2012, 19:42  [ТС] #8
Цитата Сообщение от OstapBender Посмотреть сообщение
(len_file)
ушел учить мат часть =) спс

Добавлено через 5 минут
если unsigned long int, то выделялось правильное количество памяти для буфера, но переполнение все равно возникало при закрытии процедуры.
0
08.05.2012, 19:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2012, 19:42
Привет! Вот еще темы с решениями:

ошибка с выделением памяти
выдает ошибку в выделении памяти. никто не подскажет почему? если что -задача...

Проблемы с выделением памяти
Здравствуйте. Есть контейнер QList <Node *> В Node свой QList <Node *>. ...

Проблема с выделением памяти
Всем привет! Нужна помощь. Создаю класс и при компиляции возникает ошибка. Не...

Строки с выделением динамической памяти
Привет всем! Помогите решить вот такую задачу: Ввести две строки. Определить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru