我一直在调试因错误而中止的程序中的崩溃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 0
在块外添加一个#ifdef #endif
,程序不会中止(由于堆栈粉碎)。如果我将函数定义为static void
而不是static ssize_t
缺少 return 语句会导致堆栈保护器触发中止吗?