我创建了一个多图ErrorMap并插入这样的值
map<char*,char*> ErrorMap;
ErrorMap.insert(map<char*, char*>::value_type(*l_itrList, ErrorMsg1));
Run Code Online (Sandbox Code Playgroud)
在此之后,我正在阅读这张地图三次以处理一些请求.在删除我打印地图之前,我得到的前两个对值已损坏,其余值正常.
我在这里得到核心转储.
我可以获取这些值在阅读时如何影响的详细信息.任何解决方案,以便我可以保存我的地图,直到我明确删除它.
我的日志
mapItrMov4.first(€J +)mapItrMov4.second(无效的服务请求)
mapItrMov4.first(hK +)mapItrMov4.second(无效的服务请求)
mapItrMov4.first(first)mapItrMov4.second(InvalidServiceRequest)
....
之后很好
gdb回溯
(gdb)bt
来自/lib/tls/i686/libc.so.6的raise()中的0x001c2cae
来自/lib/tls/i686/libc.so.6的abort()中的0x001c42b0
来自/lib/tls/i686/libc.so.6的__libc_message()中的0x001f2469
来自/lib/tls/i686/libc.so.6的_int_free()中的0x001f7ef8
来自/lib/tls/i686/libc.so.6的free()中的0x001f824f
来自/usr/lib/libstdc++.so.6的operator delete()中的0x004dbfd1
运算符0x004dc01d从/usr/lib/libstdc++.so.6删除[]()
amsAccMgmtReqHandler :: opServicesReqHandler中的0x080ab607(此= 0x95b91dc,m_Response = 0x95ba588"68287
amsAccMgmtReqHandler :: handleRequest中的0x080b35c4(此= 0x95b91dc,a_cpRequestStr = 0x2187820"1 <MSISDN> 102000073589953099999000000000599999000"...,a_cpResponseStr = 0x95ba588"68287
amsWorker :: run中的0x081344d5(this = 0x95b91d0)
workerThread :: ThreadProc中的0x081cef83(p = 0x959f234)
来自/lib/tls/i686/libpthread.so.0的start_thread()中的0x003ca144
来自/lib/tls/i686/libc.so.6的clone()中的0x00258a7e
小智 5
我的猜测是因为你的地图的类型是<char*, char*>,所以当你读它时,指针点被删除的内容和指针成为野指针.
当map 插入时,它只是复制它的值.这意味着:如果type是指针,则复制指针的值,但不复制指向的内容.
为什么不改变类型<string, string>?std :: string以非常低的成本处理复制并避免指针引起的问题.