You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Code::Blocks 16.01抛出char const*异常致程序终止问题求助

解决你遇到的C++异常处理终止错误

嘿,作为编程新手碰到这个问题太正常了,我来帮你理清楚问题根源,一步步搞定它!

你看到的terminate called after throwing an instance of 'char const*'错误,核心原因是:你抛出了一个const char*类型的异常,但代码里完全没有对应的catch块来捕获它。C++有个规则:如果抛出的异常没被任何catch逻辑处理,程序就会触发std::terminate()直接终止运行——这和IDE设置没关系,所以恢复默认配置自然没用哦。

先拆解下你的代码问题:

  • 你重写了标准库的sqrt函数,这很容易和系统自带的函数冲突,建议改成自定义名字比如mySqrt;
  • 你抛出了字符串字面量("Negative number is not allowed"),但整个代码里没有用try-catch结构包裹可能抛异常的代码,也没有对应类型的catch块。

修正方案1:捕获const char*类型异常

把代码改成这样,补上完整的异常处理逻辑:

#include <iostream>
#include <cmath>
#include <stdexcept>
using namespace std;

// 改名避免和标准库sqrt冲突
double mySqrt(double num) { 
    if(num < 0) 
        throw "Negative number is not allowed";
    double x = pow(num, 0.5);
    return x;
}

int main() {
    double num;
    cout << "Enter a number: ";
    cin >> num;

    // 用try包裹可能抛出异常的代码
    try {
        double result = mySqrt(num);
        cout << "Square root is: " << result << endl;
    } 
    // 专门捕获const char*类型的异常
    catch(const char* error_msg) { 
        cerr << "Error: " << error_msg << endl;
    }

    return 0;
}

更规范的方案2:使用标准库异常类型

C++标准库提供了一系列异常类(比如std::invalid_argument),比直接抛出字符串更符合语言规范,类型也更安全,推荐你用这个写法:

#include <iostream>
#include <cmath>
#include <stdexcept>
using namespace std;

double mySqrt(double num) {
    if(num < 0) 
        // 抛出标准异常类,传递错误信息
        throw invalid_argument("Negative number is not allowed");
    double x = pow(num, 0.5);
    return x;
}

int main() {
    double num;
    cout << "Enter a number: ";
    cin >> num;

    try {
        double result = mySqrt(num);
        cout << "Square root is: " << result << endl;
    } 
    // 捕获标准异常的引用,用what()获取错误信息
    catch(const invalid_argument& e) { 
        cerr << "Error: " << e.what() << endl;
    }

    return 0;
}

这样修改后,当你输入负数时,程序就会捕获异常并输出错误信息,而不是直接崩溃终止啦。

内容的提问来源于stack exchange,提问作者loody

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:35:05