使用c ++中的linux命令行进行分段错误

时间:2017-09-12 21:46:46

标签: c++ segmentation-fault

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

2 个答案:

答案 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]可以指向任何地方