ifstream在x64位平台上崩溃

问题描述

我正在尝试使用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 (将#修改为@)