Я знаю, что поведение undefined может потенциально вызвать что-либо, что делает любую программу, содержащую UB, бессмысленной. Мне было интересно, есть ли способ идентифицировать самый ранний момент в программе, поведение undefined может вызвать проблемы. Вот пример, чтобы проиллюстрировать мой вопрос.
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
//...
}
По моему мнению, возможное поведение undefined может быть вызвано (не обязательно проявляется):
- Когда
causeUndefinedBehavior()
скомпилирован. - Когда
main()
скомпилирован. - Во время запуска программы.
- В момент выполнения
causeUndefinedBehavior()
.
Или точка, в которой поведение undefined вызвано совершенно другим для каждого случая и каждой реализации?
Кроме того, если я прокомментировал строку, в которой вызывается causeUndefinedBehavior()
, это устранит UB, или он все еще будет в программе, поскольку скомпилирован код, содержащий UB?