当我运行命令行./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