首页 > 解决方案 > 非 void 函数上的 C++ 崩溃没有返回语句

问题描述

当像这样的非 void 函数没有返回任何内容时,我遇到了崩溃:

bool ClassA::foo() {
    //---do something---
}

void ClassA::foo2() {
   foo();
}

请注意,未使用此函数的返回值。并且崩溃是 100% 可重现的。它每次都崩溃。理想情况下它应该产生一个警告,如果我不使用返回值,它不应该崩溃。

此 C++ 代码在 Android NDK 版本 r19 上编译。

同样的代码在 NDK-r15c 上也可以正常工作。

有最新的变化吗?

标签: c++c++11android-ndk

解决方案


当像这样的非 void 函数没有返回任何内容时,我遇到了崩溃:

因为这是未定义的行为。

C++20 标准草案第 8.6.3 节:

从除 main 之外的 [non-void] 函数的末尾流出会导致未定义的行为。

请注意,这与函数的实际调用方式无关。因此,即使忽略返回值(如在 OP 的情况下),导致 UB 的也是“从末端流出”。


推荐阅读