2012-06-13 115 views
0

在我的示例程序中,在下面的行中出現「堆損壞」錯誤。Visual Studio中的FileOutputStream對象堆損壞

ofstream filePossibleHaplotype; 

「Windows已經引發了斷點Project_Name.exe。 這可能是由於堆,這表明在Project_Name.exe或已加載的DLL的錯誤的腐敗。」

如何聲明文件流對象導致此錯誤?

- SET = 1個 NOT_SET = 0 LENGTH = 5

void fill_Unique_Bit_Array() 
    { 
     int zeroFlag = NOT_SET; 
     int oneFlag = NOT_SET; 
     bit_array = new int(LENGTH); 
     for(int i =0; i<LENGTH; i++) 
     { 
      for(int j =0; j<NUMBER_OF_READS; j++) 
      { 
       if(readMartixArray[j][i] == '0') 
        zeroFlag = SET; 
       else if (readMartixArray[j][i] == '1') 
        oneFlag = SET; 
      } 
      if(zeroFlag==SET && oneFlag==SET) 
       bit_array[i] = SET + SET; 
      else if(zeroFlag==SET && oneFlag==NOT_SET) 
       bit_array[i] = NOT_SET; 
      else if(zeroFlag==NOT_SET && oneFlag==SET) 
       bit_array[i] = SET; 
      zeroFlag = NOT_SET; 
      oneFlag = NOT_SET; 
     } 
     reverse_bit_array = array_Reverse(bit_array, LENGTH);   
    } 

該函數調用[EDIT增補的代碼一些片段],

void find_all_possible_combinations(int ,int, int, int) 
    { 
     ofstream filePossibleHaplotype; 
    } 

這導致堆內存的崩潰。

+0

無限遞歸?如果'ofstream'在其構造函數中使用堆,那麼這行代碼也可能是程序中較早發生的腐敗的受害者。 – jxh

+1

請發佈更多上下文的代碼。這一特定線路幾乎肯定不是罪魁禍首。 – templatetypedef

+0

你確定它沒有真正發生在上面那條線嗎?調試器中的黃色箭頭顯示要執行的_next_行。 – David

回答

0

問題在於動態內存分配bit_array。我創建了一個普通的靜態數組,代碼工作正常。但我不確定爲什麼動態數組分配會導致問題。我已將int指針聲明爲全局變量。

bit_array = new int(LENGTH);