Существует переменная в области видимости. Является ли неопределенным поведение использовать этот переменный адрес вне области видимости? - PullRequest
2 голосов
/ 05 марта 2020

Вот простой пример.

void func()
{
    int* p = nullptr;
    if(p == nullptr)
    {
        int n;
        p = &n;
    }
    *p = 10; // undefined behavior??
}
int main()
{
    func();
}

Нет предупреждения compl ie (visual studio 2019), является ли "неопределенным поведением" использование "* p = 10" таким образом?

Может ли он отличаться в зависимости от компилятора, отладки или выпуска?

1 Ответ

5 голосов
/ 05 марта 2020

Да, поведение при разыменовании p не определено.

Обратите также внимание, что поведение даже чтения p, когда объект, на который он указывает, находится вне области видимости, является проблематично c: на данный момент это недопустимое значение указателя , и формально поведение чтения p определяется реализацией , что может включать сгенерированную системой ошибку времени выполнения.

Этот последний момент часто упускается из виду.

...