QSharedPointers を値として含む QMap があります。マップをループして結果を qDebug しようとするたびに、メモリ処理エラーが発生します。
マップの値は QObject を継承した Team クラスのオブジェクトです。
QMap 定義:
QMap<QString, QSharedPointer<Team>> teams;
実装:
auto json_result = GetJsonObject(raw_json);
auto json_error = json_result.second;
if (json_error.error != QJsonParseError::NoError)
{
ShowJsonParseError(json_error);
}
auto json_obj = json_result.first;
for (QString& city : json_obj.keys())
{
auto team_obj = json_obj[city].toObject();
teams.insert(city, QSharedPointer<Team>(new Team(this, city,
team_obj["Arena"].toString())));
}
for (auto team : teams.values())
{
qDebug() << team->getCity() << " - " << team->getArena();
}
チームはコンテンツをマップします:
- ("Detroit", Team), // "デトロイト" を市区町村、"Joe Louis Arena" を競技場とするチーム オブジェクト。
- ("Pittsburgh", Team) // 都市としての "Pittsburgh" と "Mellon arena" というパラメーターを持つ Team オブジェクト。
qDebug の出力は次のとおりです。
「デトロイト」 - 「メロンアリーナ」
「」 - 「メロンアリーナ」
そこで何が起こるの?出力が正しいオブジェクトから都市を取得し、次のオブジェクトから面積を取得するのはなぜですか?
私はPythonのバックグラウンドから来ており、明らかにここでメモリが正しく処理されていません。しかし、私は例を検索しましたが、ここで何が間違っているのかわかりません。
マップからもキーを取得し、それを使用してマップから値を検索しようとしましたが、最初のループの後にプログラムがクラッシュします。