C++ 删除动态分配的内存(MSVS 2012)
我在删除动态分配的内存时遇到了一个奇怪的问题。我正在使用MSVS 2012,出现了错误 1) 仅在释放模式下 2) 不是在每次运行期间,尽管我总是以相同的方式执行,并使用相同的数据。该错误平均每运行3-4次发生一次 因为它只发生在释放模式下,我在那里放了一些cout命令来查看程序失败的地方,并且它总是在标记6和标记7之间失败,也就是说,我删除了我之前分配的动态分配内存 代码如下:C++ 删除动态分配的内存(MSVS 2012),c++,memory-management,C++,Memory Management,我在删除动态分配的内存时遇到了一个奇怪的问题。我正在使用MSVS 2012,出现了错误 1) 仅在释放模式下 2) 不是在每次运行期间,尽管我总是以相同的方式执行,并使用相同的数据。该错误平均每运行3-4次发生一次 因为它只发生在释放模式下,我在那里放了一些cout命令来查看程序失败的地方,并且它总是在标记6和标记7之间失败,也就是说,我删除了我之前分配的动态分配内存 代码如下: long FOO::MainComputation(vector<double>InputArray,
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;
}
long FOO::main计算(矢量输入阵列、矢量和输出阵列)
{
coutMain\u Comp
对它的参数有什么作用?你能显示它的代码吗?注意:你可以使用InputArray.data()
作为输入参数,在调整OutputArray.resize(NR\u toout)
大小后,使用OutputArray.data()放弃手动动态分配
用于输出参数。所有其他的新建、删除和复制操作都可以扔掉。此外,“我有一个奇怪的问题…”然后您继续描述“奇怪的问题”发生的时间,称之为“错误”,但永远不要说错误是什么,所以它不仅奇怪,而且看起来很神秘。这是一个进程崩溃吗?您是否知道您可以在完全发布模式下使用调试符号进行构建,并且在附加了调试器的情况下,调试与调试位类似的发布位?//猜测要分配的输出数组的大小
-如果您猜到了怎么办错误?最明显的做法是在outarr[]
中附加一个sentinel值,并检查它是否被覆盖。如果被覆盖,你就有错误了。