[英]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.