Ошибки сегмента программы Qt, когда я пытаюсь вставить пару в карту

Я работаю над своим первым приложением 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)); тогда он будет работать. Так как это ошибка сегмента, я уверен, что это переполнение памяти или нулевой указатель, но я просто не уверен, что это такое. Спасибо за любую помощь.

0

Решение

Я собираюсь предположить, что ваш сбой происходит из-за этих строк:

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

Вы пытаетесь вставить карту, используя недопустимый (неинициализированный) итератор. Вы запускаете это в отладке или выпуске? Вы должны получить утверждение в отладке.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]