为什么在调试模式下释放静态数组时出错?
int main()
{
int ar[] = { 1,2,3,4,5,6,7,8,9 };
//other code
delete(ar);
// or free(ar);
return 0;
}
我使用free
或delete
来释放数组,它在debug mode
中以错误结束
我是否正确使用free
或delete
如何释放数组?
ar[]
不是在堆上分配的,而是在堆栈上的local/,因此不能(也不应该)删除。
功能(或块{}
)退出时,内存被释放。
您只能将delete
与new
或free()
与malloc()
一起使用
delete
运算符和"free"函数只能用于堆上分配的自己的内存。数组已在堆栈上分配,并且当内部实现找不到任何堆结构时,它将崩溃。
此外,delete只能应用于分配了new的内存并且仅在使用malloc、calloc或realloc分配的内存上可用。
最后一件事是,当您对数组使用delete时,使用delete []
这意味着移除将发生在堆叠上的较早偏移上,当数组本身的记录被分配时,否则可能会以内存泄漏或更糟的结束