3

我一直在做一些研究,但仍然找不到解决我的问题的方法。据我所知,当我们在函数之外声明变量时,它们是在堆内分配的,并且直到执行结束才释放内存;除非我们专门使用该delete功能这样做。我尝试了以下函数来释放在代码开头声明的变量,但它们都不起作用(在 dbgdel.cpp 中出现调试错误):delete, delete [], free(). 我究竟做错了什么?

我将粘贴在代码的摘要版本下面。任何帮助表示赞赏。谢谢!

(我知道在正确的编程中通常不需要全局变量,但这不是我的一段代码,我只是想按原样修复它。)

#include <stdio.h>
#include <conio.h>
#include <cv.h>
#include <highgui.h>
#include <cxcore.h>
#include "Viewer.h"
....    
// Arrays
float z_base [5201][5201];
....

uchar maskThreshold [5200][5200];
...


void main(){
.....       
     delete [] z_base;
     //free (z_base);
     //delete z_base;
     //free (&z_base);    
} 
4

3 回答 3

6

据我所知,当我在每个函数之外声明变量时,它们是在堆内分配的

这不是真的。通常,您只需调用deleteordelete[]如果您已分别使用newor分配内存new []

于 2013-01-21T12:10:34.347 回答
4
  1. 没有堆(在 C++ 中)。
  2. 所有内存在执行结束时被释放。
  3. delete什么你newdelete[]什么你new[]
  4. void main是错误的(main 必须返回 int)。

就这些。

于 2013-01-21T12:11:59.107 回答
3

你没有。运行时将为您完成。根据经验,您只需要delete/delete[]使用new/new[].

另外,请注意全局变量不是在堆上分配的,而是在静态内存中的。

于 2013-01-21T12:10:15.460 回答