Разыменование указателя NULL на ссылку, которая не используется; Это также "Undefined Поведение"?
В большом проекте, скомпилированном с использованием последнего g++, последовательно наблюдается поведение в "--- > ":
void somewhere ()
{
T* pt = find(x); // returns `nullptr` for `x`
foo(*pt);
}
void foo (T& t) // many times `t` is created from `pt = nullptr`
{
if(condition)
t.set(0); // ---> But app crashes, only if this is touched
}
Значит, find(x)
всегда возвращает nullptr
в pt
. Но приложение не сбой, если только condition
не является истинным. Предположим, если condition
никогда не будет истинным, если pt
было nullptr
, приложение все еще находится в состоянии UB?
Другими словами, как указано в вопросе:
Разыменовывает NULL-указатель в ссылку, к которой никогда не обращаются для чтения/записи, а также undefined поведение?
Поскольку нулевой указатель сам по себе не является UB, а доступен только ему. Точно так же ссылка, полученная от такого указателя (аналогично "нулевая ссылка" ), не должна действовать одинаково!