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