私は 2 つの機能を持つ C++ Dll を作成しました。1 つはバイナリ ファイルをディスクに書き込み、もう 1 つはそのファイルをディスクから読み取り、メモリにロードします。
//extremely simplified code looks like this
bool Utilities::WriteToBinary(wstring const fileName)
{
//lot of code
DWORD size = //get size of data to write
LPBYTE * blob = new LPBYTE[size];
WriteDataToMemoryBlob(blob, & size);
FILE * pFile;
if(0 != _wfopen_s (&pFile , fileName.c_str() , L"wb" ))
{
//do something
return false;
}
fwrite (blob, 1, size , pFile );
fclose (pFile);
delete[] blob;
return true;
}
bool Utilities::ReadDataFromDisk(wstring const fileName)
{
long fileSize = GetFileSize(fileName);
FILE * filePointer;
if(0 != _wfopen_s (&filePointer, fileName.c_str() , L"rb" ))
return false;
//read from file
LPBYTE * blobRead = new LPBYTE[fileSize];
fread (blobRead, 1, fileSize , filePointer );
fclose (filePointer);
//rest of the code...
問題 テストのためにこれらの DLL メソッドを呼び出す別の C++ プロジェクトを作成しました。
私を夢中にさせている問題は、同じプログラム内でWriteToBinaryとReadDataFromDiskを連続して呼び出すと、完全に正常に動作することです。しかし、一度WriteToBinaryを呼び出し、プログラムを終了させて、次にReadDataFromDiskを呼び出し、以前にWriteToBinaryによって書き込まれたファイルのパスを指定すると、freadを実行した後にblobReadにBadPtrが返されます。
共有または静的データ構造が含まれていないことを確認するために最善を尽くしました。どちらの方法も完全に独立しています。
何がこれを引き起こしているのでしょうか?