繁体   English   中英

ifstream fileOpen导致程序“以异常方式终止”

[英]ifstream fileOpen causes program to 'terminate in an unusual way'

在此行上: std::ifstream fileOpen(file.c_str()); 在下面的函数中,程序崩溃,并给我这个错误:

该应用程序已请求运行时以一种异常方式终止它。 请与应用程序的支持团队联系以获取更多信息。


进程退出,返回值3

但是,在调试模式下,整个程序运行,但是在返回的主要函数返回0语句中

程序接收到信号SIGTRAP,跟踪/断点陷阱。

我正在Windows 7上使用Orwell Dev / C ++。据我所知,第一个问题是引发但未被捕获的异常(我尚未对异常进行自我介绍,因此我不知道该如何处理,但我可以读取),并且可能破坏了堆栈。 后一个错误我无法获得很多具体信息。 有人可以指出解决方案的方向吗? 哦,同样,该函数在第四次崩溃之前被调用了三次。

//Get a line of data from a file
std::string getData( std::string file, int line )
{
    std::string data;
    std::ifstream fileOpen(file.c_str());

    if (fileOpen.is_open()) 
    {
        if( fileOpen.good() ) 
        {
            for( int lineno = 0; getline(fileOpen,data) && lineno < line; lineno ++ )
            {
                if( lineno != line )
                {
                    data = "";
                }
            }
        }

        fileOpen.close();
    }

    return data;
}

//Parse comma delimited string into a vector
void parseData( std::vector<double> &temp, std::string data ) 
{
    std::istringstream ss(data);
    std::string token;

    while(std::getline(ss, token, ',')) 
    {
        temp.push_back(atoi(token.c_str()));
    }
}

这些通过如下代码调用:

std::string instData = getData( levelName+".dat", 2 );

if( instData != "" ) 
{
    parseData( temp, instData );
    instances.resize(temp.size() / 4);
    j = 0;

    for( int i = 0; i < temp.size(); i += 4 ) 
    {
        instances[ j ].type = temp[ i ];
        instances[ j ].xPos = temp[ i + 1 ];
        instances[ j ].yPos = temp[ i + 2 ];
        instances[ j ].zIndex = temp[ i + 3 ];
        j ++;
    }

    temp.clear();
}

此代码本身是功能的一部分,该功能旨在使用来自指定文件的数据填充各种向量。 不过,其中的其余代码与上面的代码基本相同。

我可以在这里清楚地看到一个问题:

instances[ j ].xPos   = temp[ i + 1 ];
instances[ j ].yPos   = temp[ i + 2 ];
instances[ j ].zIndex = temp[ i + 3 ];

i == temp.size() - 3 ,最后一条语句将在为temp分配的内存末尾访问内存区域1,从而导致未定义行为 在这种情况下,您的程序已进入无效状态。

打开文件所在的行出现错误可能只是“未定义行为”的影响之一。 作为测试,删除以上三行,看看是否发生任何运行时错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM