C 라이브러리에서 검색 한 JSON 개체를 QVariant로 변환하는 기능이 있습니다. 모든 데이터 유형은 잘 작동합니다. 즉, 부울, 숫자, 문자열, 객체 /지도 --- 목록을 제외하고. 함수가 목록을 반환하면 "RtlValidateHeap에 지정된 잘못된 주소"로 인해 함수가 종료 될 때 충돌합니다. 이중 자유가 발생했다는 것을 의미합니다.Visual Studio 2008에서 QVariantList를 반환하면 오류가 발생합니다.
다음 코드는 오류 보여줍니다 : 나는 이것에 대해 글을 보았다
QVariant no_crash() {
QVariantMap map;
map["Hello"] = "world!";
qDebug() << map;
return map;
}
// QMap(("Hello", QVariant(QString, "world!")))
QVariant crash() {
QVariantList list;
list << "Hello world!";
qDebug() << list;
return list;
}
// (QVariant(QString, "Hello world!"))
,하지만 그들은 모두 비주얼 스튜디오 2010는 Qt는 SDK의 바이너리 버전과 호환되지 않는 대해 것 같다. 나는 http://qt.nokia.com/downloads/sdk-windows-cpp에서 다운로드 한 Qt 4.7.3을 사용해 보았습니다.
목록이 범위를 벗어날 때 충돌이 발생합니다. 반환 값이 호출 스택에 다시 전파되는 한 충돌이 발생하지 않습니다.
답장을 보내 주셔서 감사합니다.
예, 나는 다른 값을 반환 할 때 컴파일러가 QVariant를 구성 것을 완벽하게 알고,하지만 난 컴파일러는 암시 것 :-)
내에서 어떤 명시 적 코딩에 비해 동등하게 좋은 QVarint를 구축한다는 확신 필자가 제공 한 링크에서 설치하면 MinGW 및 Visual Studio 2008 용 라이브러리가 모두 설치됩니다. \ Desktop \ Qt \ 4.7.3 \ msvc2008 \ lib를 글로벌 lib 파일 검색 경로에 추가했습니다. 프로그램을 실행하면 Visual Studio 출력 창에 \ Desktop \ Qt \ 4.7.3 \ msvc2008의 DLL 만 나열됩니다. 짐을 실은.
msvcr90d.dll에서 오류가 발생합니다. 아마도 메모리가 다시 해제 될 때입니다. 스택이 파괴 된 것처럼 보이기 때문에 알기가 어렵습니다.
응용 프로그램이 다소 큰데, GUI는 C++로 작성되고 나머지는 C로 작성됩니다. 이것이 문제가 될 수 있습니까? 프로그램은 msvcp90d.dll과 msvcr90d.dll을 모두로드합니다.
저는 소스에서 Qt를 빌드 중입니다. 한번 해보 았으면 여기에 의견을 추가하겠습니다. –