Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
JohnyKnoxwille
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 4
08.05.2012, 18:44     Динамическим выделением памяти для буфера по объёму файла #1
Ув. форумчане,
Вот кусок злосчастного кода:
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
Просмотров: 118

Размер: 12.2 Кб

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

C++ ошибка с выделением памяти
C++ Конструктор с выделением памяти
C++ Двумерный массив с динамическим выделением памяти
Проблема с выделением памяти C++
Проблемы с выделением памяти C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Игорь с++
 Аватар для Игорь с++
429 / 452 / 15
Регистрация: 26.01.2011
Сообщений: 2,029
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);
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 в качестве аргумента
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
08.05.2012, 19:07     Динамическим выделением памяти для буфера по объёму файла #4
во 1 (len_file) - в квадратные скобки
Игорь с++
 Аватар для Игорь с++
429 / 452 / 15
Регистрация: 26.01.2011
Сообщений: 2,029
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);
Удачи!!!
JohnyKnoxwille
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 4
08.05.2012, 19:10  [ТС]     Динамическим выделением памяти для буфера по объёму файла #6
Спасибо всем) Разобрался.

unsigned long int len_file; //
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
08.05.2012, 19:17     Динамическим выделением памяти для буфера по объёму файла #7
и че изменилось?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2012, 19:42     Динамическим выделением памяти для буфера по объёму файла
Еще ссылки по теме:

Не могу найти ошибку в коде с динамическим выделением памяти C++
C++ Описать класс Строка с динамическим выделением памяти
C++ Динамическое выделением памяти для массивов

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

Или воспользуйтесь поиском по форуму:
JohnyKnoxwille
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 4
08.05.2012, 19:42  [ТС]     Динамическим выделением памяти для буфера по объёму файла #8
Цитата Сообщение от OstapBender Посмотреть сообщение
(len_file)
ушел учить мат часть =) спс

Добавлено через 5 минут
если unsigned long int, то выделялось правильное количество памяти для буфера, но переполнение все равно возникало при закрытии процедуры.
Yandex
Объявления
08.05.2012, 19:42     Динамическим выделением памяти для буфера по объёму файла
Ответ Создать тему
Опции темы

Текущее время: 19:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru