gpt4 book ai didi

c++ - VS2008 64 位 fread 失败

转载 作者:太空宇宙 更新时间:2023-11-04 11:36:20 25 4
gpt4 key购买 nike

我目前正在使用 Visual Studio 2008 将一个软件从 32 位移植到 64 位,我遇到了一个关于 fread 的问题,它在调用时会导致段错误:

这是重现此问题的代码示例:

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);
}
}

GetErrorferror 不报告任何错误,并且在为 32 位编译时可以读取文件。不过,在 64 位上输入 fread 时,它总是会触发段错误。

我已经尝试了其他几种文件读取方法(使用 ifstream 和 Qt 的 QFile)并且它们有效。

不幸的是,fread 在代码中的许多其他地方使用,在更改使用它的每一位代码之前,我想知道它在 VS2008 64 位的实现中是否有一些特殊之处.

提前致谢。

最佳答案

好的,伙计们,我想我明白了。

似乎此问题与 Debug模式下的 msvcrt 链接有关。

fread 调用位于链接到 msvcrtd.lib 的库中,而引发错误的可执行文件链接到 msvcrt。

我有点惊讶这只会导致恐惧问题。 libc 符号是否位于 Windows 下的 msvcrt 中?

无论如何,我目前正在清理我的链接标志。很抱歉无法发布更详细的代码示例。我们在非常严格的 NDA 下工作,我没想到这与链接标志有关 ^^'

关于c++ - VS2008 64 位 fread 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22956199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com