0

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のバックグラウンドから来ており、明らかにここでメモリが正しく処理されていません。しかし、私は例を検索しましたが、ここで何が間違っているのかわかりません。

マップからもキーを取得し、それを使用してマップから値を検索しようとしましたが、最初のループの後にプログラムがクラッシュします。

4

0 に答える 0