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 вмъква нова Label_Info за ключ 1 и след това указател към това е label_info. Тогава (поне когато не се срине!) мога да получа достъп до членовете по този начин:
label_info->x = 25;
... и така нататък. Не получавам нарушение на достъпа за може би 1 000 000 вмъквания, след което изведнъж бам. Проверих обичайните заподозрени: 32-битов праг и липса на памет и всичко изглежда наред на вложката, когато детонира. Знам, че е вмъкване, защото го виждам да минава през този STL std::map код в програмата за отстраняване на грешки, но не мога да го прочета достатъчно добре, за да разбера какво се опитва да получи за вмъкването.
Така че този код лоша новина ли е? Всяко мнение от хора, които знаят повече за C++ от мен, ще бъде оценено. Благодаря.