0

動的に割り当てられたメモリを削除すると、奇妙な問題が発生します。MSVS 2012 を使用していますが、エラーが発生します

1) リリース モードでのみ 2) すべての実行中ではありませんが、常に同じ方法で同じデータを使用して実行します。このエラーは、平均して 3 ~ 4 回の実行ごとに発生します。

リリースモードでのみ発生するため、プログラムが失敗する場所を確認するためにいくつかの cout コマンドをそこに入れました。タグ #6 と #7 の間、つまり、数ステップ前に割り当てた動的に割り当てられたメモリを削除する場所で常に失敗します。

コードは次のとおりです。

long FOO::MainComputation(vector<double>InputArray, vector<double> & OutputArray)
{
    cout << "#1" << endl;
    // determine the size of the input array
    long NR_TOTINP = InputArray.size();
    // create dynamic array to hold the input array and copy values
    double * inparr = new double [NR_TOTINP];
    for (long i=0; i < NR_TOTINP; i++){inparr[i] = InputArray[i];}
    cout << "#2" << endl;
    // guess the size of the output array to allocate
    long NR_TOTOUT = InputArray.size() * 20 + 1;
    double * outarr = new double [NR_TOTOUT];
    cout << "#3" << endl;
    // call on the dll
    FOO_lfldld main_comp = (FOO_lfldld)GetProcAddress(hDLL,"Main_Comp");
    cout << "#4" << endl;
    long res = main_comp(NR_TOTINP,inparr,NR_TOTOUT,outarr);                                                    // todo: protect this with try... catch?
    // copy output parameters over
    cout << "#5" << endl;
    OutputArray.resize(NR_TOTOUT);
    for (long i=0; i < NR_TOTOUT; i++){OutputArray[i] = outarr[i];}
    cout << "#6" << endl;
    // delete dynamic arrays
    delete [] inparr;
    cout << "#7" << endl;
    delete [] outarr;
    cout << "#8" << endl;
    // done!
    return res;
}

呼び出された DLL は、私が書いた他のコード (Python ではありますが) で正常に動作することに注意してください。

何か案は?

4

0 に答える 0