Qt를 사용하여 JSON 객체를 만들고 QJson을 사용하여 QString으로 변환합니다. 이 (정상적으로) 잘 작동하며이 경우 않습니다 있지만 내 Qt 데이터 구조의 소멸자에서 액세스 위반이 발생합니다. 개체가 잘 빌드 된, 내 네트워크 연결을 통해 보내고 함수가 끝난 후 내 응용 프로그램이 충돌합니다.QVariantMap이 소멸자에서 충돌합니다.
내 코드는 다음과 같습니다
void bar()
{
QVariantMap data;
data.insert("Id", 1);
QList<QVariant> list; //QVariantList
for (QMap<...>:ConstIterator ...) //Loop through a Map
{
QMap<QString, QVariant> singleEntry; //QVariantMap
singleEntry.insert("LocalId", it.value());
QList<QVariant> entryList; //QVariantList
for (...) //Loop through another structure
{
entryList.append("foo");
}
singleEntry.insert("List", entryList);
list.append(singleEntry);
}
data.insert("Entries", list);
QJson::Serializer.serialize(data); // Works fine
} // Crash here
내가 entryList
를 구축 내부 루프를 제거하면 모든 것이 잘 작동합니다. data
의 소멸자는 내용을 삭제할 수 없지만 나는 그다지 잘 모른다. 전체 데이터 구조를 직렬화하는 동안 잘 될 것 같다 (나는 QJson는 주어진 데이터에서 아무것도 변경되지 않습니다 바랍니다)하지만 .. 내가있어
이 동작은 잘못된 라이브러리를 프로젝트에 연결하는 일반적인 신호입니다. 예를 들어 디버그 모드 라이브러리를 추가하여 프로젝트를 릴리스하거나 비자를 릴리스하는 등의 일반적인 신호입니다. – Raiv
VS를 편집 용도로만 사용하는 것으로 확신 할 수 없습니다. 프로젝트는 JAM을 사용하여 컴파일됩니다. 다른 의존성 때문에 릴리스 버전을 컴파일 할 수 없으며 Qt 디버그 라이브러리 만 링크합니다. 올바른 라이브러리가 프로젝트에 링크되어 있는지 확인할 수 있습니까? – Tobias