当我尝试将一对插入地图时,Qt程序seg出错

Qt program seg faults when I try to insert a pair into a map

本文关键字:Qt 程序 出错 seg 地图 插入      更新时间:2023-10-16

我正在开发我的第一个Qt应用程序,实际上是小部件,当我尝试用<int, QString>对填充标准库地图时,我遇到了段错误。我的目标是用整数键和 QString 值填充地图。我不知道配对是否是最好的方法,所以任何建议都会很棒。

这是除了主文件之外唯一的源文件。

#include "linuxtips.h"
#include "ui_linuxtips.h"
LinuxTips::LinuxTips(QWidget *parent) :
  QWidget(parent),
  ui(new Ui::LinuxTips)
{
  loadRandTip();
  ui->setupUi(this);
}
LinuxTips::~LinuxTips()
{
  delete ui;
}
void LinuxTips::on_learnMore_clicked()
{
}
void LinuxTips::on_viewAll_clicked()
{
}
void LinuxTips::loadRandTip()
{
  int i = 0;
  std::map<int, QString>::iterator it;
  QString line;
  QFile inputFile(":/tipFile.txt");
  inputFile.open(QIODevice::ReadOnly);
  QTextStream in(&inputFile);
  do{
    line = in.readLine();
  //  this->TipMap.insert(it, std::pair<int, QString >(i,line));
    i++;
  }while(!in.atEnd());
}

如果我取消评论this->TipMap.insert(it, std::pair<int, QString >(i,line));那么它将运行。由于这是一个 seg 错误,我确定它是内存溢出或空指针,但我只是不确定它是什么。感谢您的任何帮助。

我假设您的崩溃是由于以下行造成的:

std::map<int, QString>::iterator it;
this->TipMap.insert(it, std::pair<int, QString >(i,line));

您正在尝试使用无效(未初始化)的迭代器插入到地图中。您是否在调试或发布中运行它?您应该在调试中得到一个断言。