gpt4 book ai didi

c++ - 当返回非 void 的函数中没有 return 语句时检测到堆栈粉碎

转载 作者:行者123 更新时间:2023-11-30 01:35:02 25 4
gpt4 key购买 nike

我一直在调试程序中的崩溃,该程序因错误检测到堆栈粉碎而中止。我已将崩溃范围缩小到只有一个函数,即:

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

由于我没有在任何地方定义 SOME_FLAG,该函数实际上什么都不做,并且没有返回语句就退出了。

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

也看不到中止

缺少return语句会导致stack-protector触发abort吗?

最佳答案

关于 C++:

如果声明返回非 void 值的函数(main 除外)存在但没有 return 或 throw,则程序的行为未定义。

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

是的。行为未定义。任何事情都有可能发生。

关于c++ - 当返回非 void 的函数中没有 return 语句时检测到堆栈粉碎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54891092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com