基本的には、ファイルにバイト配列を書きたいが、プログラムがクラッシュする。 append.exeの0x7766DEE1(KernelBase.dll)で未処理の例外が発生しました。0xC0000005:0x00000000という場所にアクセス違反が書き込まれました。Writefileがクラッシュし、アクセス違反が発生する
BYTE *image ;
BYTE *bigMem;
#define REASONABLY_LARGE_BUFFER 16777216
file = CreateFile(fileName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
fileSize = GetFileSize(file, NULL);
bigMem = (BYTE *)HeapCreate(NULL, REASONABLY_LARGE_BUFFER, 0);
image = (BYTE *)HeapAlloc(bigMem, HEAP_ZERO_MEMORY, fileSize);
if (bigMem == NULL || image == NULL){
printf("Allocation failed");
return EXIT_FAILURE;
}
printf("We are writing to the file %p, with data location %p, and filesize %d\n", file, image, fileSize);
LPDWORD at = 0;
WriteFile(file, image, fileSize, at, NULL);
は、印刷は言うこと: 私たちは、データの場所02451590、およびファイルサイズで、ファイル00000038に書いている161169
16MBが「合理的に大きい」ことは確かですか? OSがそれほど多くのヒープメモリを与えたくなく、割り当て関数が 'NULL'を返す場合はどうなりますか?あなたは決してそれをチェックしないでください。 –
私はbigMemかimageのどちらかがnullであるかどうかを調べるためにコードを入力します。 – ThePlague
エラーチェックを追加する場合は、ファイルが実際に開かれたことを確認する必要があります。 –