当我运行命令行./hello.out时,核心被转储。有人能告诉我我错过了什么。
#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;
}
答案 0 :(得分:1)
您似乎正在尝试访问不存在的argv
元素,因此您正在访问程序无法控制的内存。执行此操作时,内核将立即终止您的程序。您正在检查argc
的值,这是正确的做法,但您在访问argv
后就是这么做了。您只需在访问argv
之前执行该检查。
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int counter = 1, sum = 0,x;
if (argc !=2) argv // <-- Make sure there are two elements before indexing into
{
cout << "Error\n";
exit(1);
}
x = atoi(argv[1]); // <-- You should study and use 'std::stoi' instead
if ( x < 0 )
{
cout << "Error\n";
exit(1);
}
while (counter <= x)
{
cout << counter << endl;
sum = sum + counter;
++counter;
}
cout << "Sum is " << sum << endl;
return 0;
}
答案 1 :(得分:0)
嗯....在第6行你访问argv [1]但你没有通过任何paraeters ...所以argv [1]可以指向任何地方