C++中的堆错误

Bob*_*ond 1 c++ heap pointers

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

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

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

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

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

提前致谢...

小智 5

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

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

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

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

  • 在几乎所有现代编译器中,就性能而言,将分配(和删除)移出循环不会产生任何影响。另一方面,如果数组“逻辑上”属于循环,那么通常最好将它留在那里。 (2认同)
  • @Tal内存分配始终具有性能成本,无论编译器如何"现代".对我而言,数组确实属于循环并不明显. (2认同)
  • @Tal我从未遇到过能够"优化"动态内存分配的编译器 - 您知道哪一个?关于你的第二点 - 这个初学者程序员将分配放在循环中的事实决不能证明它在逻辑上属于那里.并且动态分配的数组不会初始化为零,因此这种假设是不正确的. (2认同)