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), // Team 对象,参数“Detroit”为城市,“Joe Louis Arena”为竞技场。
  • ("Pittsburgh", Team) // 参数“Pittsburgh”为城市,“Mellon arena”为参数的 Team 对象。

qDebug 输出为:

“底特律” - “梅隆竞技场”
“” - “梅隆竞技场”

这里会发生什么?为什么输出从正确的对象和下一个对象的区域中获取城市?

我来自 python 背景,显然这里的内存处理不正确。但是我已经搜索了示例并且不知道这里有什么问题。

我也尝试从地图中获取键并使用它从地图中搜索值,但是在第一次循环后程序崩溃。

4

0 回答 0