当函数 returning 非空中没有 return 语句时检测到堆栈粉碎

stack smashing detected when no return statement in function returning non-void

我一直在调试程序中的崩溃,该程序因错误 stack smashing detected 而中止。我已将崩溃范围缩小到一个函数,即:

static ssize_t a (const char *x, const char *y, size_t z) {
#ifdef SOME_FLAG
    return b(x, y, z);
#endif
}

因为我没有在任何地方定义 SOME_FLAG,该函数实际上什么也不做,并且在没有 return 语句的情况下退出

我观察到,如果我只是在 #ifdef #endif 块外添加一个 return 0,程序不会中止(由于堆栈粉碎)。如果我将函数定义为 static void 而不是 static ssize_t

,也看不到中止

缺少 return 语句会导致堆栈保护器触发中止吗?

关于 C++:

如果函数(main 除外)声明为 return 非空值而没有 return 或抛出,则程序的行为未定义。

Can the lack of a return statement cause stack-protector to trigger abort?

是的。行为未定义。什么事都有可能发生。