【问题标题】:'Segmentation fault (core dumped)' with case带有案例的“分段错误(核心转储)”
【发布时间】:2017-08-18 16:12:42
【问题描述】:

'Segmentation fault (core dumped)' 当我执行以下程序时出现。但是,如果我使用 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;
}

【问题讨论】:

    标签: c++ segmentation-fault


    【解决方案1】:

    您的switch 块中没有break。因此,每个案例都会失败。当argc1 时,这会调用未定义行为。当您不想要 fallthrough 时,您应该 break 退出 switch

    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]] 来声明您的 fallthroughs是故意的。

    【讨论】:

    • @RogerLipscombe...哎呀。我的错。已更正。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 2015-06-25
    • 2021-06-03
    相关资源
    最近更新 更多