删除,免费还是取消分配?

时间:2016-03-08 04:19:20

标签: c++ arrays memory-management

我遇到了一个问题,我在堆栈上使用了太多内存。我正在使用几个大型数组,我只需要在代码中的步骤之间。基本上我需要知道如何释放由创建的数组变量使用的内存:

Cast(Jobno As Varchar(20)) = '93388-01'

4 个答案:

答案 0 :(得分:1)

你应该使用矢量来做这样的事情。它是C ++标准库的一部分,在大多数实现中都经过了优化。当向量超出范围时,向量占用的内存将自动释放。所以你永远不必自己释放记忆。

使用向量的另一个好处是,您不必担心堆栈空间不足,因为所有"数组"向量占用的内存位于程序的堆上。

例如http://en.cppreference.com/w/cpp/container/vector/vector

除此之外,如果您认为您的程序内存永远不够,那么您应该考虑将该磁盘用作另一种存储机制。数据库以这种方式工作。他们将大部分数据存储在磁盘上。

答案 1 :(得分:1)

要故意释放一些自动存储空间('堆栈中的项目),您可以执行以下操作 - 基本上您只需限制变量的范围

更改代码:

type_micro

将代码更改为:

//...
float arrayName[length][width]; 
// ...

注意:向量使用有限数量的堆栈(我的系统上有24个字节), 无论你投入多少元素!

答案 2 :(得分:0)

您不需要任何特别声明。

如果数组是具有自动存储持续时间的局部变量,则数组将在函数返回时退出或退出范围;如果是静态变量(在函数外声明),则在退出程序时释放数组。

答案 3 :(得分:-1)

如果遇到堆栈内存不足的情况,您可能希望在堆上分配内存。在这种情况下,您将要新建数组。

float** my_array = new float* [rowCount];
for(int i = 0; i < rowCount; ++i)
 {
    my_array[i] = new float[columnCount];
 }


// and delete it later
 for(int i = 0; i < rowCount; ++i) 
  {
    delete [] my_array[i];
  }

delete [] my_array;