- 有返回值的函数,未return
1. 返回值为bool的函数未返回return true/false,导致程序运行莫名其妙崩溃?
如果一个非 void 函数在某些路径下没有返回值,调用该函数时的行为是未定义的。
1)可能返回一个随机值(栈上的垃圾数据)
2)可能导致程序崩溃
3)可能表现为各种奇怪的现象
2. 编译器行为
有的编译器(如 MSVC、GCC、Clang)默认只给警告,不报错
有的编译器在优化时会假设你总是返回了值,结果导致奇怪的运行时错误
有的编译器在调试模式下表现正常,Release模式下就出错
结论:
编译不报错≠代码没问题,未定义行为是C++最危险的陷阱之一
- 调用system执行系统命令
// 多线程环境下,可能多个线程都会调用systemw API,如果通过以下这样判断返回值可能会有问题,因为system实际调用成功了,但返回非0
static int ExecuteCommand(const char* command) {
int result = system(command);
if (result != 0) {
std::cerr << "Command failed: " << command << std::endl;
return -1;
}
return 0;
}
- pack设置字节对齐
#pragma pack(push, 1)
std::condition_variable cond; // 将cond声明在1字节对齐中,调用cond.wait()时可能会有问题
#pragma pack()
// 注意:设置字节对齐时,最好是只针对自己需要的数据(比如一个结构体),不要整个类成员变量都包含