删除动态分配的内存时,我遇到了一个奇怪的问题。我正在使用 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 中)一起正常工作,所以我不怀疑它会自行删除内存。
有任何想法吗?