0

サンプルプログラムでは、次の行で「ヒープの破損」エラーが発生します。

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);        
    }

この関数は、

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

これはヒープメモリのクラッシュにつながります。

4

1 に答える 1

0

問題は、bit_array の動的メモリ割り当てにありました。通常の静的配列を作成したところ、コードは正常に機能しました。しかし、動的配列割り当てが問題を引き起こしている理由がわかりません。int ポインターをグローバル変数として宣言しました。

bit_array = new int(LENGTH);

于 2012-06-13T23:03:06.337 に答える