Label_Info 只是一个带有一些 int 成员的普通类:
class Label_Info {
public:
Label_Info();
unsigned int x, x1, x2, y, y1, y2, size;
};
Label_Info::Label_Info() {
this->x = this->y = this->size = 0;
this->x1 = this->y1 = -1;
this->x2 = this->y2 = 0;
}
然后,用 gcc 编译:
std::map<unsigned int, Label_Info> labels_info;
unsigned int label = 1;
Label_Info *label_info = &labels_info[label];
很少,我在第三行被访问冲突阻止。据我了解,std::map 为键 1 插入了一个新的 Label_Info,然后指向它的指针是 label_info。然后(至少当它不崩溃时!)我可以像这样访问成员:
label_info->x = 25;
... 等等。我可能没有收到 1,000,000 次插入的访问冲突,然后,突然,砰。我检查了通常的嫌疑人:32 位阈值和内存不足,当它引爆时,插入物上的一切看起来都正常。我知道这是一个插入,因为我可以看到它通过调试器中的 STL std::map 代码,但我无法很好地阅读它来判断它试图访问什么以进行插入。
那么这段代码是坏消息吗?任何比我更了解 C++ 的人的见解将不胜感激。谢谢。