fread失败,VS2008为64位
fread fails with VS2008 64-bits
我目前正在使用Visual Studio 2008将一个软件从32位移植到64位,我遇到了一个关于fread
的问题,当调用时会导致segfault:
以下是重现此问题的代码示例:
void somefunction(std::string filepath)
{
FILE* myfile = fopen(filepath.c_str(),"rb"); // returns a valid handle
if (myfile)
{
char* buffer = new char[BUFFER_SIZE+1];
memset(buffer,0,BUFFER_SIZE+1);
fread(buffer,1,BUFFER_SIZE,myfile); // segfault happens here
fclose(f);
}
}
CCD_ 2和CCD_ 3不报告任何错误,并且在编译32位时可以读取该文件。当在64位上输入fread
时,它总是触发segfault。
我尝试过其他几种文件读取方法(使用ifstream
和Qt的QFile
),它们都能工作。
不幸的是,fread
在代码的许多其他地方都有使用,在更改使用它的每一位代码之前,我想知道它在VS200864位的实现中是否有什么特殊之处
提前谢谢。
好吧,伙计们,我想我想通了。
此问题似乎与调试模式下的msvcrt链接有关。
fread调用位于链接到msvcrtd.lib的库中,而引发错误的可执行文件则链接到了msvcrt。
我有点惊讶这只会引起fread的问题。libc符号是否位于Windows下的msvcrt中?
无论如何,我目前正在清理我的链接标志。很抱歉无法发布更详细的代码示例。我们在非常严格的NDA下工作,我不排除这与链接标志^^'
相关文章:
- 将应用程序从32位移植到64位时出现问题
- 64位机器上的C++内存对齐
- qmake:检测目标位宽(32 位或 64 位)
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- Qt 5.11.2 (Clang 8.0 (Apple), 64 位), 找不到 QJSEngine 文件
- 在 64 位边界上对齐C++结构数组?
- 如何为字符串生成唯一但一致的 N 位哈希(小于 64 位)?
- 在 64 位的 c++ 中运行 mstest 测试
- 在两个线程上读/写 64 位,无互斥/锁定/原子
- 浮点数为 32 位和 64 位二进制表示形式
- 是否有 64 位等效于 GetLastInputInfo / LASTINPUTINFO?
- 所有可能的链接生成器与64位密钥
- WinAPI C++如何从 64 位应用程序加载资源
- 在 c++ 中输出 64 位整数
- 使用192/256位整数求和无符号64位整数向量的点积的最快方法
- 如何在 64 位平台上计算 32 位哈希C++?
- 使用 SysNative 在 Visual Studio 中创建 64 位应用程序
- 在 64 位整数内旋转(90°)位矩阵(最多 8x8 位)
- 64 位进程中的 AnyCPU C# DLL 无法引用 64 位C++ DLL(给出错误:无法加载文件或程序集)
- fread失败,VS2008为64位