C ++指针“错误:双重释放或损坏(退出)”

时间:2012-03-28 04:51:27

标签: c++ pointers

这是我的代码:

uint16_t * ptemparr = new uint16_t[20];
for (int x=0;x<2;x++)
{
   function(ptemparr);
   ptemparr ++;

}
delete[] ptemparr;

当我这样做时,我收到此错误:

double free or corruption (out)

EDITED: 谢谢我理解为什么我会收到这个错误,现在你认为这是一个更好的主意吗?

uint16_t temparr[20];
uint16_t * ptemparr = temparr;
for (int x=0;x<2;x++)
{
   function(ptemparr);
   ptemparr ++;

}

这样我就可以在堆栈上创建指针,并且没有内存泄漏问题。 此外,上面的代码必须每1秒运行一次,所以在让我知道这种情况的最佳编码实践之前,请记住这一点

3 个答案:

答案 0 :(得分:5)

您需要将同一地址传递给delete []返回的new [] 另外,请确保function()没有deallocate the memory by calling删除传递的指针。

答案 1 :(得分:0)

您需要将ptemparr重置为其home地址,因为您在for循环中将其递增。所以,我建议在删除它之前将其减少2。

ptemparr-=2;

答案 2 :(得分:0)

您需要delete new返回的相同地址。

我总是将我的循环行在原始指针的副本上,并且永远不会修改mallocnew返回的原始指针。