Я работаю над графическим интерфейсом в SDL. Я создал ведомый / мастер-класс, который содержит std :: list указателей на его собственные ведомые, чтобы создать иерархию в GUI (окно, содержащее кнопки. Button a label и т. Д.). Некоторое время он работал нормально, пока я не отредактировал совершенно другой класс , который напрямую не влияет на подчиненный / мастер-класс. Вызов list.push_front () в старом ведомом / мастер-классе теперь выдает следующую ошибку при отладке в VS C ++ 2008 express, и я не могу найти причину.
"Необработанное исключение в 0x00b6decd в
workbench.exe: 0xC0000005: доступ
нарушение места чтения
0x00000004 ".
* workbench.exe - это мой проект.
Исключение возникает в методе _Insert в коде списка в строке 718:
_Nodeptr _Newnode = _Buynode(_Pnode, _Prevnode(_Pnode), _Val);
Список создается в определении класса master / slave, а класс slave / master создается в куче для вставки в список slave другого master. Список, который вылетает, является пустым, когда вызывается push_front (), но он занимает второе место в иерархии, поэтому он работал один раз. Как я уже сказал, раньше все работало нормально, и ведомый / мастер-класс не был изменен, чтобы вызвать ошибку.
Новый класс также использует списки. Может ли использование нескольких списков вызвать конфликты? Могу ли я случайно испортить кучу?
Любая помощь и советы, что я мог бы найти, приветствуется.
P.S Код довольно большой, поэтому я думаю, что лучше его не включать. Тем более, что я не совсем уверен, что именно является причиной ошибки. Извините, если немного не хватает
Обновление: Я заменил push_front () на создание итератора и использование insert (). Результатом был итератор, указывающий на «baadf00d» после назначения list.begin (). Насколько я могу судить, baadf00d - это некоторый указатель ошибки / NULL, который VS использует для объектов, которым ничего не было назначено. Я полагаю, это еще один признак того, что список поврежден?