- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我写了一个 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。
我已尽力确保不涉及共享或静态数据结构。这两种方法是完全独立的。
知道是什么原因造成的吗?
最佳答案
一个错误是数组分配为LPBYTE
是 BYTE*
所以:
LPBYTE * blobRead = new LPBYTE[fileSize];
正在分配 BYTE*
的数组,不是 BYTE
的数组.更改为:
BYTE* blobRead = new BYTE[fileSize];
要避免动态分配,您可以使用 std::vector<BYTE>
相反:
std::vector<BYTE> blobRead(fileSize);
关于c++ - fread 在新进程中完成时给出 BadPtr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14291667/
C++。它可能更多的是在 Visual Studio 中调试和使用内存的问题。 我有一个分析文件列表的程序,当前文件的路径是字符串的串联:名为“文件夹”的 CString 对象和文件名本身(也是 CS
每当我在代码中到达这一点时,我都会收到 BadPtr 错误:为什么? for(int i = 0; i #include #include #include using namespace s
我写了一个 C++ Dll,它有两个功能,一个是将二进制文件写入磁盘,另一个是从磁盘读取该文件并加载到内存中。 //extremely simplified code looks like this
我的 std::map 定义为 typedef std::map ImageDataMap; typedef std::pair ImageDataPair; typedef std::map::it
我有一个函数可以解析 .csv 文件并使用“,”作为分隔符标记每一行。我将它标记为一个 vector 。然后我遍历该 vector 并使用模板函数将每个字符串转换为数字。出于某种原因,除了一次编译配置
我是一名优秀的程序员,十分优秀!