I 핵심에 다음과 같은 스택 추적이 있습니다Qt는 코어
#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;
}
}
foreach는 라인이다 여기서 QMap은 getter 메소드로 검색됩니다. 누구든지 QMap :: freeData()가하는 일을 알고 있습니까? 내가 인터넷에서 찾을 수있는 유일한 참조는 실제 QMap.h 소스입니다. 메서드가 QMap 소멸자에서 사용되는 것처럼 보입니다. 메소드 이름은 데이터를 자유롭게한다고 믿게합니다. 어쨌든 freeData()에 대해 더 많이 알고 있다면이 코어를 찾아서 고칠 수있을 것이라고 생각합니다.
그래, 알았어. 여기서 아이디어는 모든 메소드의 끝 (또는 시작과 끝)에서 Map에 액세스 할 수 있습니까? 그런 식으로 제가 부패가 발생했던 곳에 도움이 될 다른 스택 추적으로 끝날 것입니까? .detatch()가 무슨 소용입니까? – Qman
분명히 우리는 지난 한 해 동안이 문제를 여러 곳에서 해결해 왔습니다. 내가 이해하는 바와 같이, Map에는 명확하게 정의 된 소멸자가없는 C 구조가 포함되어 있으며이 경우의 얕은 사본이 문제입니다. 우리는이 문제를 두 가지 방법 중 하나로 해결합니다. 우리는지도의 로컬 (깊은) 복사본을 만들고 그 위에 반복합니다. 그것은 하나의 방법입니다. 다른 하나는 map.keys()를 반복하기 위해 foreach 루프를 변경하여 결코지도 자체의 얕은 복사본을 만들지 않는 것입니다. 그런 건 들어 본 적 있어요? – Qman
그럼요? 그것은 C++ 클래스 내부에 정의 된 구조체입니다. sturct에는 2 개의 정수, 5 개의 정수 및 bool이 있습니다. 그게 전부 야. – Qman