當我運行命令行./hello.out時,核心被轉儲。有人能告訴我我錯過了什麼嗎?在C++中使用linux命令行的分段錯誤
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int counter = 1, sum = 0,x;
x= atoi(argv[1]);
if (x<0)
{cout << "Error\n"; exit(1);}
if (argc !=2)
{cout << "Error\n"; exit(1);}
while (counter <= x)
{
cout << counter << endl;
sum = sum + counter;
++counter;
}
cout << "Sum is " << sum << endl;
return 0;
}
如果'的argv [1]'不存在,程序會崩潰,因爲你試圖讀取並不存在的價值。您需要至少使用一個參數來調用它,或者進行一些錯誤檢查。例如:'./hello.out 5' 例如,如果(argc <2)返回-1;' – Carl
',則可以在嘗試調用'atoi(n)'前將其放在行上: 使用atoi()永遠不會有任何藉口。 –
我們更傾向於使用術語「未定義的行爲」來「崩潰」,因爲它不會總是崩潰。它可能會以一種更安靜,更陰險的方式搞砸,在沒有人注意到它爲時已晚之前。 – user4581301