2013-08-30 63 views
0

我嘗試將文件讀入地圖,但程序停在文件中間。 該文件包含百萬行的行,每行是由數字和INT組成的STRING。 例如1230981237120313 123.爲什麼我的程序在向MAP插入值時停止?

#include<map> 
#include<iostream> 
#include<fstream> 
void main() 
{ 
    ifstream mapfile("filename.txt",ifstream::in); 
    int itemp; 
    string stemp; 
    map<string,int> mapping; 
    while(mapfile>>stemp>>itemp) 
    { 
     mapping[stemp]=itemp; 

    } 
} 

當它處理有數百行的小文件時,它是可以的。但是,當它達到超過9000萬行時,它會停止而不報告任何錯誤,只需按「按任意鍵繼續...」即可停止。

我已經做了一些分析,並且我可以確保程序在讀取文件中的行並在需要時執行mapping[stemp]=itemp。每次停止時,都會發生在不同的線路上,但總是在9000萬左右。

有誰能告訴我爲什麼會發生這種情況? 任何幫助將不勝感激。

+0

您正在監視內存使用情況嗎? –

+0

另外,考慮在X百萬行(或僅使用一個調試器)之後開始打印您從文件中獲得的值,以便確定問題何時發生。 –

+2

一分錢到一英鎊你用盡內存 – john

回答

0

在內存中一次建議***not to read entire file***總是可取的,因爲文件大小可以從小kbs到大Mbs變化。

每次從文件中讀取數據時,最好在塊中讀取固定的千字節(比如4092),然後關閉它。

+0

'std :: map <>'既不是任意的也沒有特別的限制; * process *的可分配內存空間,但是*是*。一個環統治他們全部。 – WhozCraig

+0

@WhozCraig,是的,我同意。 – user1502952

+0

@ user1502952 Mabe就是這樣。謝謝。但是如果我只是讀取文件並且不放入地圖,它可以很好地執行直到文件結束。當我想要插入地圖時會發生這種情況。它恰好發生在映射[stemp] = itemp行。 –

相關問題