C ++ Какое самое раннее неопределенное поведение может проявиться?

Я осознаю, что неопределенное поведение может потенциально вызвать что угодно, что делает любую программу, содержащую 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, был скомпилирован?

Ответы на вопрос(5)

Ваш ответ на вопрос