2012-06-13 79 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);