当我尝试将一对插入地图时,Qt程序会出现故障

Cal*_*orm 0 c++ qt4 map segmentation-fault

我正在研究我的第一个Qt应用程序,小部件,当我尝试用一<int, QString>对填充标准库映射时,我得到了一个段错误.我的目标是用int键和QString值填充地图.我不知道对是否是最好的方法,所以任何建议都会很棒.

这是除main之外唯一的源文件.

#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());
}
Run Code Online (Sandbox Code Playgroud)

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

Aes*_*ete 5

我将假设你的崩溃是由于这些线:

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

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