当函数 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?
是的。行为未定义。什么事都有可能发生。
我一直在调试程序中的崩溃,该程序因错误 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?
是的。行为未定义。什么事都有可能发生。