Analiz etmeye çalıştığım bir çökme dökümü var (VC++ 2010).Şablon parametreleri ne olursa olsun hangi std :: harita yöntemleri aynıdır (ve sembolleri paylaşabilir)?
myapp.exe!std::_Tree<std::_Tmap_traits<unsigned int,StructB,std::less<unsigned int> ... >::_Erase(...)
myapp.exe!std::_Tree<std::_Tmap_traits<unsigned int,StructA,std::less<unsigned int>,... >::clear()
Not farkı (net()() _Erase çağırır):
Sonra (ı okunabilirlik için burada çok kesilmiş ettik) şöyle bir çağrı yığını var değerin şablon parametresi (StructA vs. StructB). Şimdi, tam olarak aynı ikili olan farklı yöntemlerin aslında farklı bir kod kullanmasına rağmen PDB'de aynı simgeye sahip olabileceğini biliyorum. Burada durumun bu olduğunu varsayalım (std :: map :: _ Erase, değer türü ne olursa olsun aynıdır).
Ama nasıl bilebilirim? Bunun geçerli olduğu stl yöntemlerinin bir listesi var mı (bu MS uygulaması için)? Bu bir çeşit bir hata mıdır?
Güncelleme
: (Bir metin editörü) PDB içine bakıyor, ben> :: _ ... Sil birçok std :: harita < görmek ve özellikle ben STRUCTA ve StructB ikisi için onları görüyoruz. Katlama hakkında bir şey ifade ederse bilmiyorum. Ayrıca, std :: haritasının demonte kodu std :: map olarak yorumlanan bir adrese yapılan bir çağrıyı gösterir. Bu kod katlamayı kastediyorum ...
Belki de exe/dll'inizi bağımlılık yürüteç ile açacaksanız, tüm _Erase sembollerini bulabilir ve aslında iki tane olup olmadığına bakabilirsiniz. Kendimi hiç kontrol etmeyi denemedim, bu yüzden eğer bu durumda yardımcı olacaksa deneyimden söz edemem. – selalerer