이 사소한 것을 묻는 것에 사과드립니다.하지만 제대로 이해하지 못하는 것 같아서 메모리 관리에 대해 알고 있다고 생각한 모든 것을 완전히 오해 한 것 같습니다.문자열로 Qt에 QVariantMap 만들기
나는 일부 데이터에 대한 네트워크 응답을 구문 분석하는 기능을 가지고 있고 그것은 다음과 같습니다
// Call from another function
QVariantMap *mappedResult = handleReply(reply);
...
// Function
QVariantMap *handleReply(QNetworkReply *reply) {
QVariantMap *result = new QVariantMap;
QVariant testvalue = new QVariant("testvalue");
result->insert("testkey", testvalue);
if (reply->error() > 0) {
qDebug() << "Error number = " + reply->errorString();
QVariant variant = QVariant.fromValue(reply->errorString());
result->insert("error", variant);
} else {
QJsonDocument jsonResponse = QJsonDocument::fromJson(jsonString.toUtf8());
QJsonObject jsonResponseObject = jsonResponse.object();
*result = jsonResponseObject.toVariantMap();
}
return result;
}
오류가없는 경우는, 결과가 toVariantMap
기능 내장으로 잘 구문 분석됩니다. 그러나 오류가있을 때 함수에서 다시 전송되는 결과에 항목을 작성하려고합니다. 이 함수에서 볼 수 있듯이 두 가지 다른 방법으로 문자열에서 QVariants를 만들려고합니다.
첫 번째 방법은 이와 같은 오류를 범 :
C:\Qt\5.2.0\mingw48_32\include\QtCore\qvariant.h:466: error: 'QVariant::QVariant(void*)' is private inline QVariant(void *) Q_DECL_EQ_DELETE;
^
이런 번째 방법 :
result->insert("testkey", "testvalue");
result->insert("error", reply->errorString());
: I는 다음과 같이 값을 설정 시도한
[PATH] error: expected primary-expression before '.' token QVariant variant = QVariant.fromValue(reply->errorString());
마지막 접근 방식은 컴파일 오류를주지 않지만 return 문에서 result 변수는 반환 할 수 없습니다. 디버거에서 검사하고 return 문을 실행하자마자 응용 프로그램이 "new"를 제대로 사용하지 않는다는 메모리 문제로 인해 충돌합니다.
"Error accessing memory address 0x...".
최소한의 지식이있는 사람이이 간단한 작업을 수행하는 방법을 분류하는 데 도움이 될 수 있다면 매우 유용 할 것입니다. 사용자 정의 문자열을 키/값 쌍으로 사용하여 함수에서 QVariantMap을 반환하려면 어떻게해야합니까?
환호.
QVariant 인스턴스화에 대한 수정 해 주셔서 감사합니다. 저는 값으로 전달하는 것이 더 깔끔하다는 것에 동의합니다. 그래서 업데이트했습니다. 나는 포인터를 사용하고 있었고 "new"는 내가 얻었던 메모리 오류가지도 내용이 반환 될 때 덮어 써 졌기 때문이라고 생각했기 때문에. 그것은 seg 오류가 발생한 Qt 디버거에 문제가있는 것 같습니다. 오 잘, 누군가가 언젠가는 도움이되기를 바랍니다 :) – span