C ++中的堆错误

时间:2010-05-13 09:03:14

标签: c++ pointers heap

我是C ++的初学程序员。 最近,我正在使用C ++进行图像处理。

但是我有一些问题要问。假设我有一些代码如下:

for (int i=0;i<100000;i++)
{
  int * a = new int[10000];
  //do something
  delete [] a;
}

当我执行该代码时,我收到运行时错误,堆错误......

该代码是否有任何问题,我的意思是,我可以分配内存并在同一个循环中释放它吗?

提前致谢...

3 个答案:

答案 0 :(得分:5)

错误可能在您未显示的代码中。您可能还想重写这样的代码:

int * a = new int[10000];
for (int i=0;i<100000;i++)
{
  //do something
}
delete [] a;

如果没有别的东西会更有效率。因为这是C ++,您可能还会考虑:

vector <int> a( 10000 );
for (int i=0;i<100000;i++)
{
  //do something
}

答案 1 :(得分:1)

问题可能在于“做某事”。很可能你在数组之外写,这会导致堆损坏。

除了在同一循环迭代中分配和释放内存是可以的,但没有多大意义 - 因为元素的数量是常量,你可以在循环之前分配并在循环之后自由分配。

答案 2 :(得分:0)

new和delete之间的代码可能会在分配的内存之前或之后覆盖部分内存。这称为内存覆盖(下溢或溢出)。

检查代码以查看您是否意外写入索引10001(甚至10000不正确)。最大指数为9999。