为什么下面的删除不正确?
ip= static_cast<int*>malloc(sizeof(int));
*ip= 12;
. . .
delete ip; // wrong!
答案 0 :(得分:6)
您应该致电free()
以释放使用malloc()
获取的内存。
delete
运算符仅适用于new
。
所以,
ip= static_cast<int*>malloc(sizeof(int));
*ip= 12;
. . .
free(ip);
或
ip= new int;
*ip= 12;
. . .
delete ip;
ip = 0;
请注意,删除指针在释放之后取消它是个好主意,以便将来错误地取消引用它的任何尝试都将保证失败并使bug更容易找到。
答案 1 :(得分:0)
malloc
应与free
配对,new
应与delete
配对。 delete
会做一些free
没有做的额外事情(例如调用析构函数),因此使用它来释放用malloc
分配的内存可能会很糟糕。