Здравствуйте, Аноним, Вы писали:
А>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 указывает на уже мертвый объект?
Всё очень просто данные после выхода за область видимости не затираются специально, то есть в памяти (стеке) они всё равно остаются а так как стек принадлежит твоему процессу то и ошибка доступа к памяти не происходит, однака не факт что этот код всегда будет выдавать правильный результат, скорее результат надо считать не опраделённым и то что он получается правильным чистая случайность, так как если ты запишешь чего нибудь в стек поверх то результат будет другим, а в стек ты запишешь при первом же вызове любой функции.