簡體   English   中英

在C ++中有奇怪的行為,需要cout語句來防止應用程序崩潰?

[英]Strange behavior in C++, cout statement is required to prevent app crash?

我正在嘗試解決算法問題,但目睹了奇怪的行為。 每當我注釋掉第一條cout語句時,它似乎都是相對良性的,並且僅出於測試目的,我的腳本不會運行。 它將編譯沒有錯誤,但是當我使用txt文件輸入參數運行時,它將崩潰。

但是,如果我將cout語句留在下面的腳本中,則它運行正常,沒有問題。 我不確定為什么會這樣。 同樣,該腳本可以正常工作,但在注釋掉看似不必要的cout語句時卻無法達到預期目的。 我在這里想念什么?

測試輸入文件

5
9 6
4 6 8 
0 7 1 5


int main(int argc, char *argv[]) 
{
    ifstream stream(argv[1]);
    string line;
    while (getline(stream, line)) 
    {

        cout<<line<<" String representation."<<endl;  // Why do i need to keep this to prevent segfault / AppCrash (windows)?
        vector<long int> numbers = string_to_ints(line);

        for (int i =0; i < numbers.size(); i++)
        {
            cout<<numbers.at(i)<<" ";
        }
        cout<<" number representation."<<endl;

    }
    return 0;
} 

下面的string_to_ints()聲明

vector<long int> string_to_ints(string input) // takes string input and produces a list of ints
{

    char* buffer;

    stringstream ss(input);

    vector<long int> tokens;

    while (ss >> buffer)
    {
        tokens.push_back(atol(buffer)); // creates a vector of ints
    }

    return tokens;
}

我正在使用gcc版本4.8.1

問題是您永遠不會為string_to_ints buffer分配內存。 由於這是未定義的行為,所以任何事情都可能發生,包括當放置一個cout時似乎起作用,而在移除cout時不起作用。

最簡單的解決方案是使用std::string代替char*作為緩沖區。 然后,您避免進行自己的內存管理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM