“分段错误(核心转储)”与案例

时间:2017-03-25 19:55:25

标签: c++ segmentation-fault

当我执行以下程序时,会出现

'分段错误(核心转储)'。但是,如果我使用 if ... else 语句,它不会给我任何错误。在这种情况下错误消息的原因是什么?如何在没有错误的情况下使用 case 语句?

#include <iostream>
#include <cstdlib>
using namespace std;

int main(int argc, char* argv[]){

/*
    if (argc == 1){
        cout << argv[0] << endl;
    }else
    if (argc == 2){
        int n;
        n = atoi(argv[0]);
        cout << n << endl;
    }
*/
    switch (argc){
        case 1:{
            cout << argv[0] << endl;
        }
        case 2:{
            int n;
            n = atoi(argv[1]);
            cout << n << endl;
        }
    }

    return 0;
}

1 个答案:

答案 0 :(得分:4)

break块中没有switch。因此,每个案例都将通过。这会在argc1时调用未定义的行为。当您不希望通过时,您应该从开关 break

switch (argc){
    case 1:{
        cout << argv[0] << endl;
        break;
    }
    case 2:{
        int n;
        n = atoi(argv[1]);
        cout << n << endl;
        break;
    }
}

从C ++ 17开始,当编译器警告你隐式 fallthroughs (它不是必需的)时,你可以使用属性[[fallthrough]]来声明 fallthrough 是故意的。