我编写了一个具有两个功能的 C++ Dll,一个将二进制文件写入磁盘,另一个从磁盘读取该文件并加载到内存中。
//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...
问题 我创建了另一个 C++ 项目,它调用这些 DLL 方法进行测试。
让我发疯的问题是,当我在同一个程序中连续调用WriteToBinary和ReadDataFromDisk时,它们工作得非常好。但是,当我一次调用WriteToBinary并让程序退出并下次调用ReadDataFromDisk并为其提供由WriteToBinary先前写入的文件路径时,我在执行fread后在blobRead中得到了BadPtr。
我已尽力确保不涉及共享或静态数据结构。这两种方法是完全独立的。
知道可能是什么原因造成的吗?