2012-07-09 164 views
0

我正在使用內存緩衝區寫入文件。我將每條記錄複製到內存緩衝區,然後將其刷新到磁盤。算術指針和fstream C++

CODE:

char * OutBuffer; 
    char *pt; 
    OutBuffer = new char(BufferSize); 
    pt = OutBuffer; 

    for (int i=0; i<(FileSize/RECORD_SIZE); i++){ 
     if (((i % recordsPerBlock)==0) && (i>0)){ 
      FileSortHandle->write(OutBuffer, BufferSize); 
      pt = OutBuffer; 
     } 
     else{ 
      memcpy(pt, minRecord, RECORD_SIZE); 
      pt = pt + RECORD_SIZE; 
     } 
      minRecord = nullptr; 
    } 

當我打電話 「FileSortHandle->寫(OutBuffer,BUFFERSIZE);」在VS顯示:

「Windows已經引發了STL_Test2.exe斷點

這可能是由於堆的腐敗,這表明在STL_Test2.exe或任何的DLL的錯誤它加載。 。

這也可能是由於

用戶按壓F12而STL_Test2.exe具有焦點,輸出窗口可以具有更多的診斷信息「。

有人能幫助我嗎?

回答

8
OutBuffer = new char(BufferSize); 

這只是一個字符分配內存,而這一個char是初始化BufferSize這可能會導致溢出,如果BufferSize是太大char

什麼你可能是指這是:

OutBuffer = new char[BufferSize]; //use square brackets! 

BufferSize字符分配內存。緩衝區未初始化。


這是不相關的問題,但如果可能的話,當你聲明的指針更喜歡分配內存:

char * OutBuffer = new char [BufferSize]; 
char *pt = OutBuffer; //prefer initialization over assignment 

也就是說,寧願初始化過分配。

+0

您的意思是「使用方括號」嗎?尖括號看起來像這個'<>'。這些'[]'是方括號。 – anthropomorphic 2012-07-09 17:38:09

+1

@MichaelDorst:哎呀.. – Nawaz 2012-07-09 17:39:52