2012-09-18 30 views
0

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

这是除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()); 
} 

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

+1

你看过堆栈跟踪吗? – Aesthete

+0

当我试图在主函数和注释行之前放置多个断点时。该程序立即崩溃,从不停止在任何中断点。当我使用Valgrind时也是如此。没有输出,只是一个崩溃通知。 – CallMeNorm

回答

5

我会假设你的崩溃是由于这些行:

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

您正在尝试插入使用无效(初始化)迭代器的地图。你在调试还是释放中运行这个?你应该在调试中得到一个断言。

+0

我尝试在调试中运行它,但它崩溃并且不停在任何断点处。它在整个屏幕上喷出反汇编器输出,但这看起来不太有用。或者是? – CallMeNorm

+0

谢谢,那是问题所在。使用'it(this-> TipMap.begin())初始化它' – CallMeNorm

+0

太好了,很高兴提供帮助。 – Aesthete

相关问题