Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 删除动态分配的内存(MSVS 2012)_C++_Memory Management - Fatal编程技术网

C++ 删除动态分配的内存(MSVS 2012)

C++ 删除动态分配的内存(MSVS 2012),c++,memory-management,C++,Memory Management,我在删除动态分配的内存时遇到了一个奇怪的问题。我正在使用MSVS 2012,出现了错误 1) 仅在释放模式下 2) 不是在每次运行期间,尽管我总是以相同的方式执行,并使用相同的数据。该错误平均每运行3-4次发生一次 因为它只发生在释放模式下,我在那里放了一些cout命令来查看程序失败的地方,并且它总是在标记6和标记7之间失败,也就是说,我删除了我之前分配的动态分配内存 代码如下: long FOO::MainComputation(vector<double>InputArray,

我在删除动态分配的内存时遇到了一个奇怪的问题。我正在使用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;
}
long FOO::main计算(矢量输入阵列、矢量和输出阵列)
{

cout
Main\u Comp
对它的参数有什么作用?你能显示它的代码吗?注意:你可以使用
InputArray.data()
作为输入参数,在调整
OutputArray.resize(NR\u toout)
大小后,使用
OutputArray.data()放弃手动动态分配
用于输出参数。所有其他的新建、删除和复制操作都可以扔掉。此外,“我有一个奇怪的问题…”然后您继续描述“奇怪的问题”发生的时间,称之为“错误”,但永远不要说错误是什么,所以它不仅奇怪,而且看起来很神秘。这是一个进程崩溃吗?您是否知道您可以在完全发布模式下使用调试符号进行构建,并且在附加了调试器的情况下,调试与调试位类似的发布位?
//猜测要分配的输出数组的大小
-如果您猜到了怎么办错误?最明显的做法是在
outarr[]
中附加一个sentinel值,并检查它是否被覆盖。如果被覆盖,你就有错误了。