다음 메서드는 런타임 중에 첫 번째 줄에 이중 자유 또는 손상 (빠른) 오류를 생성합니다. 이는 프로그램이 실행되는 동안 1 초 또는 35 초에 무작위로 발생합니다.이중 자유 또는 손상 (빠른) 오류를 알아낼 수 없습니다.
QSharedPointer<QPixmap> Utils::loadImg(QString fileName)
{
QPixmap *pixmap = new QPixmap(fileName);
QSharedPointer<QPixmap> qspPixmap(pixmap);
return qspPixmap;
}
이것은 정적 인 방법으로, 실제로는 Qt가 제공하는 스마트 포인터를 사용하여 픽스맵을 얻습니다. 일단 스마트 포인터를 얻으면 나중에 사용하기 위해 맵 구조에 저장합니다. 맵 구조에서 항목을 제거하면 메모리를 확보해야하며 그렇게하는 것처럼 보입니다. loadImg (QString) 메서드는 자체 스레드에서 실행중인 다른 메서드 (Qt에서 제공 한 QtConcurrent 및 QFuture 사용)에 의해 호출된다는 점에 유의하십시오.
정말 문제가 무엇인지 알 수 없습니다. 디버거는 첫 번째 줄을 문제가있는 줄로 표시합니다.
미리 도움을 주셔서 감사합니다.
"첫 번째"줄은 정확히 무엇입니까? Linux를 사용하고 있다면 valgrind를 사용해보십시오. –
그 라인에 도달하기 전에 뭔가 나쁜 일이 일어 났을 가능성이 있지만 메모리 관리자가 손상을 발견 한 것입니다. 거꾸로 작업하고 그 시점까지 모든 메모리 관리를 점검해야합니다. – molbdnilo
valgrind에서 앱을 실행하면 처음에 힙이 손상된 곳을 추적하는 데 도움이 될 수 있습니다. –