簡體   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