Я пытаюсь прочитать файл с помощью malloc, но мне не удалось заставить его работать. Например, этот код использует статический буфер и работает: [code]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); } }
[/code] Это не так: [code] 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); } } [/code] Он собирается успешно, но выдает исключение. При использовании отладчика сообщества Visual Code отображается это сообщение. [code]Exception thrown: read access violation. a was 0x111011101110111.[/code]