如何理解输出?

oll*_*dbg 3 c++ syntax

int main(int argc, char** argv)
{
    try {
            char *p2 = NULL;
            cout << "p2:" << strlen(p2) <<endl; 
                    cout << "mark";
        }
        catch (...) {
            cout << "caught exception" <<endl;
        }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是p2:,所以既没有cout << "mark";cout << "caught exception" <<endl;没有运行,为什么?

Vic*_*let 6

在C++中,取消引用NULL指针会导致未定义的行为,这意味着任何事情都可能发生:计算机可能爆炸,函数可能返回任意值,程序可能被操作系统异常(与C++表达式不同,不能)被抓住了try-catch).

简而言之,不要这样做.

如果你真的需要这样做是出于一个非常好的理由(比如解决库中的一个bug,你完全无法控制),请查看操作系统对这些内容的支持(例如Windows上的SEH).


Fré*_*idi 5

POSIX兼容的系统,你的程序接收SIGSEGV信号,一旦你叫死strlen(p2),因为p2NULL.

据我所知,有没有办法赶上便携的段错误使用C++异常.

  • 即使得到"p2:"作为输出也不能保证,它可能会保留在输出流缓冲区内并且永远不会被打印. (2认同)