0

私は最初の Qt アプリケーションであるウィジェットに実際に取り組んでおり、標準ライブラリ マップを<int, QString>ペアで埋めようとするとセグメンテーション違反が発生します。私の目標は、マップを int キーと 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));と実行されます。これはセグ フォールトであるため、メモリ オーバーフローまたはヌル ポインターであると確信していますが、それが何であるかはわかりません。助けてくれてありがとう。

4

1 に答える 1

5

クラッシュの原因は次の行であると想定します。

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

無効な (初期化されていない) イテレータを使用してマップに挿入しようとしています。これをデバッグまたはリリースで実行していますか? デバッグでアサーションを取得する必要があります。

于 2012-09-18T03:44:35.770 に答える