【发布时间】:2013-01-04 11:41:12
【问题描述】:
我一直在做一些研究,但仍然找不到解决问题的方法。
据我所知,当我们在函数之外声明变量时,它们是在堆内分配的,并且直到执行结束才释放内存;除非我们专门使用 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);
}
【问题讨论】:
-
变量并不存在于“堆上”。只有 objects 可以。
-
@KerrekSB:一些变量是对象(具体来说,不是引用的变量是对象)。所以“只有对象”可能不是表达这一点的正确方式。
-
实际上,如果我们可以确定将
int i = 0;之类的声明中定义的对象称为“变量”是不正确的,我会收回这一点。有人可能会争辩说,“变量”不是对象本身,而是一个有名称的编译时实体,其名称指的是一个对象。 -
@SteveJessop:我认为你把猫和人弄错了。变量可以是对象。但是动态分配的对象永远不能是变量,变量永远不能是动态对象。 (我对此进行了详细说明in this answer。)
-
@KerrekSB:这就是我的想法,“变量”这个词确实正确地指代了对象。没什么大不了的,但是当一些 Z 实际上是 Xs 时,说“X 不是 Y,只有 Z 是”就不太有意义了。
标签: c++ visual-c++ heap-memory free