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