在调试模式下释放静态数组时出错



为什么在调试模式下释放静态数组时出错?

int main()
{
 int ar[] = { 1,2,3,4,5,6,7,8,9 };
 //other code
 delete(ar);
 // or free(ar);
 return 0;
}

我使用freedelete来释放数组,它在debug mode中以错误结束
我是否正确使用freedelete
如何释放数组?

ar[]不是在堆上分配的,而是在堆栈上的local/,因此不能(也不应该)删除。

功能(或块{})退出时,内存被释放。

您只能将deletenewfree()malloc() 一起使用

delete运算符和"free"函数只能用于堆上分配的自己的内存。数组已在堆栈上分配,并且当内部实现找不到任何堆结构时,它将崩溃。

此外,delete只能应用于分配了new的内存并且仅在使用malloc、calloc或realloc分配的内存上可用。

最后一件事是,当您对数组使用delete时,使用delete []这意味着移除将发生在堆叠上的较早偏移上,当数组本身的记录被分配时,否则可能会以内存泄漏或更糟的结束

最新更新