map表find方法的怪异问题
代码如下:
- C/C++ code
void CMyApp::Test(char *t){ vpObject *po=new vpObject(); g_pHPObjManager[t]=po; Test1();}void CMyApp::Test1(){ CString str; map<char *,vpObject *>::const_iterator i; map<char *,vpObject *>::iterator j; for(i=g_pHPObjManager.begin();i!=g_pHPObjManager.end();i++) { str.Format("%s",i->first); //str="ee" j=g_pHPObjManager.find("ee"); //"ee"为Test传入的参数 str.Format("%s",j->first); //程序崩溃????!!!!! }}如果Test这样写就没问题(程序不会崩溃)
- C/C++ code
void CMyApp::Test(char *t){ vpObject *po=new vpObject(); g_pHPObjManager["ee"]=po; Test1();}这究竟是为什么呢?
[解决办法]
map用的是operator ==。char*的operator ==是直接比较指针不是比较字符串。所以你find"ee"就直接找不到,然后j==map.end(),->first就throw exception了。
所以干啥要用char*不用string……
[解决办法]
顶LS,把char *换成string吧
[解决办法]