C++ C++;指向if语句中变量的指针

C++ C++;指向if语句中变量的指针,c++,pointers,stack,C++,Pointers,Stack,以下代码的行为令我惊讶: map<string,long>* map_ptr; if(true){ map<string, long> my_map; my_map["a"] = 1; my_map["b"] = 2; my_map["c"] = 3; map_ptr = &my_map; } //works ONLY IF this for loop comes before the next for loop for(

以下代码的行为令我惊讶:

map<string,long>* map_ptr;
if(true){
    map<string, long> my_map;
    my_map["a"] = 1;
    my_map["b"] = 2;
    my_map["c"] = 3;
    map_ptr = &my_map;
}

//works ONLY IF this for loop comes before the next for loop
for(map<string, long>::iterator itr = map_ptr->begin(); itr != map_ptr->end(); ++itr)
    cout << itr->second << endl; 

// does not work prints random bits
for(map<string, long>::iterator itr = map_ptr->begin(); itr != map_ptr->end(); ++itr)
    cout << itr->first << endl; 
map*map\u ptr;
如果(真){
绘制我的地图;
我的地图[“a”]=1;
我的地图[“b”]=2;
我的地图[“c”]=3;
map\u ptr=&my\u map;
}
//仅当此for循环位于下一个for循环之前时才有效
对于(map::iterator itr=map_ptr->begin();itr!=map_ptr->end();++itr)
不能第二次开始();itr!=map_ptr->end()++itr)

cout first代码有未定义的行为,这意味着任何事情都可能发生,包括出现工作,因为
map\u ptr
是一个悬空指针,因为
my\u map
将在
if
的关闭
}
时被销毁。
map\u ptr
将保留
my\u map
的地址,但无论如何,这不会影响
my\u map
的生存期。

代码具有未定义的行为,意味着任何事情都可能发生,包括出现工作状态,由于
map\u ptr
是一个悬空指针,因为
my\u map
将在
if
的关闭
}
时被销毁。
map\u ptr
将保留
my\u map
的地址,但无论如何这不会影响
my\u map
的生存期。

一旦变量超出范围,不要尝试访问它!它已经死了(尽管编译器可能还没有把它全部清理干净)。关于酒店钥匙的帖子在哪里?一旦变量超出范围,就不要尝试访问它!它已经死了(尽管编译器可能还没有把它全部清理干净)。关于酒店钥匙的帖子在哪里。。。