问题描述
我正在尝试使用ifstream
打开txt文件并使用ifstream
从该文件中读取数据,尽管该代码在x86位平台上正常工作,但在使用它时会导致奇怪的应用程序崩溃在x64位平台上。
ifstream font;
font.open(filename);
if ( font.fail() )
{
return false;
}
// Used to read 95 ASCII characters in the text file
for ( int i = 0; i < 95; i++ )
{
font.get(temp);
while (temp != ' ')
{
font.get(temp);
}
font.get(temp);
while (temp != ' ')
{
font.get(temp);
}
font >> m_Font[i].left;
font >> m_Font[i].right;
font >> m_Font[i].size;
}
取消font.fail()
的检查会导致程序卡在font.get(temp);
上,这意味着font.fail()
会导致程序崩溃,如果有人知道该问题的解决方案或可以指向在这种情况下,请使用另一种读取文本文件的方式。
可复制的示例可以在下面找到,请确保将构建配置设置为x64,将子系统设置为Windows。
#include <Windows.h>
#include <iostream>
#include <fstream>
using namespace std;
struct TestStruct
{
int test;
}; TestStruct* testStruct;
bool Test(char* filename)
{
testStruct = new TestStruct[8];
if (!testStruct)
{
return false;
}
ifstream font;
font.open(filename);
if (font.fail())
{
return false;
}
char temp;
for ( int i = 0; i < 8; i++)
{
font.get(temp);
while (temp != ' ')
{
font.get(temp);
}
font.get(temp);
while (temp != ' ')
{
font.get(temp);
}
font >> testStruct[i].test;
}
font.close();
return true;
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR pScmdline,int iCmdshow)
{
AllocConsole();
freopen("CONOUT$","w",stdout);
while ( Test((char*)"test.txt") )
{
}
return 0;
}
P.S我无法从构建文件夹中执行二进制文件时重现此问题,但是在使用附加的本地Windows调试器启动它时,仍然会发生此问题。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)