我是C ++的初学程序员。 最近,我正在使用C ++进行图像处理。
但是我有一些问题要问。假设我有一些代码如下:
for (int i=0;i<100000;i++)
{
int * a = new int[10000];
//do something
delete [] a;
}
当我执行该代码时,我收到运行时错误,堆错误......
该代码是否有任何问题,我的意思是,我可以分配内存并在同一个循环中释放它吗?
提前致谢...
答案 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。