这是我的代码:
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秒运行一次,所以在让我知道这种情况的最佳编码实践之前,请记住这一点
答案 0 :(得分:5)
您需要将同一地址传递给delete []
返回的new []
另外,请确保function()
没有deallocate the memory by calling
删除传递的指针。
答案 1 :(得分:0)
您需要将ptemparr重置为其home地址,因为您在for循环中将其递增。所以,我建议在删除它之前将其减少2。
ptemparr-=2;
答案 2 :(得分:0)
您需要delete
new
返回的相同地址。
我总是将我的循环行在原始指针的副本上,并且永远不会修改malloc
或new
返回的原始指针。