У меня есть следующий трассировки стека на ядре:Qt ядро на QMap :: freeData()
#1 0x..... in raise()
#2 0x..... in abort()
#3 0x..... in xehInterpretSavedSigaction()
#4 0x..... in xehExceptionHandler()
#5 <signal handler called>
#6 0x..... in QMap<int, myClass#1>::freeData(QMapData*)()
#7 0x..... in myClass#2::myClass#2Method()
#8 0x..... so on and so forth
Код, который использует QMap выглядит следующим образом:
foreach (myClass::sturct1 conn, myClass3->getMap())
{
if (conn == x)
{
return conn;
}
}
Еогеасп линия где QMap извлекается с помощью метода геттера. Кто-нибудь знает, что делает QMap :: freeData()? Единственными ссылками, которые я могу найти в Интернете, являются фактический источник QMap.h. Похоже, что метод используется в деструкторе QMap. Имя метода приводит меня к мысли, что оно освобождает данные. Во всяком случае, я думаю, что если бы я знал больше о freeData(), я мог бы выяснить и исправить это ядро.
ОК, поэтому я думаю, что получаю. Является ли идея здесь получить доступ к Карте в конце (или начале и конце) каждого метода, и таким образом у меня будет другая трассировка стека, которая поможет мне отследить, где произошла коррупция? Какая польза от .detatch()? – Qman
, по-видимому, мы решаем этот вопрос за прошедший год в ряде мест. Насколько я понимаю, Карта содержит c-структуру, которая не имеет четко определенного деструктора, и как-то мелкая копия этой вещи является проблемой. Мы продолжаем фиксировать эту проблему одним из двух способов. Мы делаем локальную (глубокую) копию карты и перебираем ее. Это один из способов. Другой заключается в изменении цикла foreach, чтобы перебирать map.keys(), тем самым не делая мелкой копии самой карты. Вы когда-нибудь слышали об этом? – Qman
Уверен? Это структура, определенная внутри класса C++. У sturct есть 2 ints, 5 Strings и bool. Вот и все. – Qman