2012-09-18 31 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

相關問題