我知道未定义的行为可能会导致任何事情,这使得任何包含 UB 的程序都可能毫无意义。我想知道是否有任何方法可以识别程序中未定义行为可能导致问题的最早点。这是一个例子来说明我的问题。
void causeUndefinedBehavior()
{
//any code that causes undefined behavior
//every time it is run
char* a = nullptr;
*a;
}
int main()
{
//code before call
//...
causeUndefinedBehavior();
//code after call
//...
}
据我了解,可能引发(不一定表现出来)未定义行为的可能时间是:
- 什么时候
causeUndefinedBehavior()
编译。 - 什么时候
main()
编译。 - 程序运行时。
- 当时
causeUndefinedBehavior()
被执行。
或者对于每种情况和每种实现,未定义行为的触发点是否完全不同?
另外,如果我注释掉causeUndefinedBehavior()
调用的行,那会消除 UB,还是因为编译了包含 UB 的代码,它仍然在程序中?