C++异常未输出至cout,运行触发libc++abi.dylib终止错误求助
解决未捕获char*异常导致的程序终止问题
嘿,这个问题我太熟了!你看到的libc++abi.dylib: terminating with uncaught exception of type char const* Abort trap: 6错误,本质是你抛出了一个未被捕获的异常,而且这个异常的类型是const char*——大概率是你直接throw了一个字符串字面量,但没写对应的catch块去处理它,导致程序被系统强制终止了。
先看你可能写出的错误代码场景
比如这段代码运行就会触发你遇到的问题:
#include <iostream> using namespace std; int main() { int num = 5; if (num != 0) { throw "num is not 0!"; // 抛出const char*类型的异常,但没有捕获 } return 0; }
C++规定:如果抛出的异常没有任何catch块能匹配捕获,程序就会调用std::terminate()终止执行,而你看到的就是这个终止过程中输出的错误信息。
两种解决方法
方法1:添加匹配const char*的catch块
直接捕获你抛出的字符串类型异常,然后输出到cout:
#include <iostream> using namespace std; int main() { try { int num = 5; if (num != 0) { throw "num is not 0!"; } } catch (const char* error_msg) { // 精准匹配const char*类型的异常 cout << error_msg << endl; // 这里就能把内容输出到cout了 } return 0; }
方法2:使用标准库异常类(更推荐)
C++标准库提供了std::exception及其派生类(比如std::runtime_error),用它们来抛出异常会更规范,也方便统一处理各种异常:
#include <iostream> #include <stdexcept> // 必须包含这个头文件 using namespace std; int main() { try { int num = 5; if (num != 0) { throw runtime_error("num is not 0!"); // 抛出标准异常对象 } } catch (const exception& e) { // 捕获所有std::exception派生的异常 cout << e.what() << endl; // 通过what()方法获取异常信息 } return 0; }
总结
你并不是对异常机制完全理解错误,只是漏掉了捕获异常的关键步骤——抛出异常后必须有对应的catch块来处理,否则程序就会直接终止。只要补上匹配的catch逻辑,就能正常输出你想要的内容啦。
内容的提问来源于stack exchange,提问作者Blink
相关产品推荐
相关产品推荐

