Как прочитать файл, используя API Win32 и динамическое распределение памяти?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как прочитать файл, используя API Win32 и динамическое распределение памяти?

Сообщение Anonymous »

Я пытаюсь прочитать файл с помощью malloc, но мне не удалось заставить его работать.
Например, этот код использует статический буфер и работает:

Код: Выделить всё

HANDLE fileHandle = CreateFileW(L"C:\\Users\\Home\\Documents\\a.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (fileHandle == INVALID_HANDLE_VALUE) {
MessageBox(NULL, L"Invalid Handle", NULL, MB_OK);
}
else {
char b[500]; // buffer with size defined at compile time
DWORD size = GetFileSize(fileHandle, NULL);
if (ReadFile(fileHandle, &b, 409, NULL, NULL) != true) {
MessageBox(NULL, L"Read file error", NULL, MB_OK);
}
else {
b[500] = 0;
MessageBoxA(NULL, b, "It works!", MB_OK);
}
}

Это не так:

Код: Выделить всё

   HANDLE fileHandle = CreateFileW(L"C:\\Users\\Home\\Documents\\a.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (fileHandle == INVALID_HANDLE_VALUE) {
MessageBox(NULL, L"Invalid Handle", NULL, MB_OK);
}
else {

DWORD size = GetFileSize(fileHandle, NULL);

LPVOID b = malloc(size+1);
if (ReadFile(fileHandle, &b, size, NULL, NULL) != true) {
MessageBox(NULL, L"Read file error", NULL, MB_OK);
}
else {
char* a = (char*)b;
a[size] = 0;
MessageBoxA(NULL, a, "It works!", MB_OK);
}
}
Он собирается успешно, но выдает исключение. При использовании отладчика сообщества Visual Code отображается это сообщение.

Код: Выделить всё

Exception thrown: read access violation. a was 0x111011101110111.


Подробнее здесь: https://stackoverflow.com/questions/793 ... allocation
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»