Re: Почему работает?????????
От: sypo Россия  
Дата: 22.08.03 12:50
Оценка:
Здравствуйте, Аноним, Вы писали:

А>void F ( int** vp )

А>{
А> int li = 10 ;
А> *vp = &li ;
А>}

А>int main(int argc, char* argv[])

А>{
А> using namespace std ;
А> int *lp = NULL ;
А> F ( &lp ) ;

А> cout<<"["<<*lp<<"]"<<endl ;


А> return 0;

А>}

А>Почему в VC 6 и VC 7 данный код работает, хотя, вроде бы, *lp указывает на уже мертвый объект?


Всё очень просто данные после выхода за область видимости не затираются специально, то есть в памяти (стеке) они всё равно остаются а так как стек принадлежит твоему процессу то и ошибка доступа к памяти не происходит, однака не факт что этот код всегда будет выдавать правильный результат, скорее результат надо считать не опраделённым и то что он получается правильным чистая случайность, так как если ты запишешь чего нибудь в стек поверх то результат будет другим, а в стек ты запишешь при первом же вызове любой функции.
Сергей.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.