配对功能不正确的示例

时间:2013-05-08 12:16:52

标签: c++ memory-leaks

从本文档的第41页开始:https://www.securecoding.cert.org/confluence/download/attachments/40402999/04+Dynamic+Memory.pdf?version=1&modificationDate=1267372189000

为什么下面的删除不正确?

ip= static_cast<int*>malloc(sizeof(int));
*ip= 12;
. . .
delete ip; // wrong!

2 个答案:

答案 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分配的内存可能会很糟糕。