tôi có chức năng sau khi các nhà xây dựng cho một lớp:C++ Map Cho Xe Buýt báo lỗi khi cố gắng thiết lập một giá trị
template<typename T>
void Pointer<T>::Pointer(T* inPtr)
{
mPtr = inPtr;
if (sRefCountMap.find(mPtr) == sRefCountMap.end()) {
sRefCountMap[mPtr] = 1;
} else {
sRefCountMap[mPtr]++;
}
}
Dưới đây là định nghĩa cho bản đồ:
static std::map<T*, int> sRefCountMap;
tôi nhận được Đôi khi xảy ra lỗi khi mã này chạy:
#0 0x95110fc0 in std::_Rb_tree_decrement()
#1 0x00017ccc in std::_Rb_tree_iterator<std::pair<Language::Value* const, int> >::operator-- (this=0xbfffe014) at stl_tree.h:196
#2 0x0001b16c in std::_Rb_tree<Language::Value*, std::pair<Language::Value* const, int>, std::_Select1st<std::pair<Language::Value* const, int> >, std::less<Language::Value*>, std::allocator<std::pair<Language::Value* const, int> > >::insert_unique (this=0x2a404, [email protected]) at stl_tree.h:885
#3 0x0001b39c in std::_Rb_tree<Language::Value*, std::pair<Language::Value* const, int>, std::_Select1st<std::pair<Language::Value* const, int> >, std::less<Language::Value*>, std::allocator<std::pair<Language::Value* const, int> > >::insert_unique (this=0x2a404, __position={_M_node = 0x2a408}, [email protected]) at stl_tree.h:905
#4 0x0001b5a0 in __gnu_norm::map<Language::Value*, int, std::less<Language::Value*>, std::allocator<std::pair<Language::Value* const, int> > >::insert (this=0x2a404, position={_M_node = 0x2a408}, [email protected]) at stl_map.h:384
#5 0x0001b6e0 in __gnu_norm::map<Language::Value*, int, std::less<Language::Value*>, std::allocator<std::pair<Language::Value* const, int> > >::operator[] (this=0x2a404, [email protected]) at stl_map.h:339
Cảm ơn.
tại sao không chỉ làm sRefCountMap [mPtr] ++? Nếu nó không tồn tại, nó sẽ được đưa vào cuộc sống ban đầu thành 0 ... – Goz
Bạn có bất kỳ trường hợp tĩnh nào của 'Con trỏ' không? Chúng có thể được xây dựng trước bản đồ. –
Đây có phải là chương trình đơn luồng hay làm một số chủ đề khác nhau sử dụng sRefCountMap không? Chỉ cần tự hỏi nếu chúng ta có thể loại trừ lỗi chủ đề. –