0

从本文档的第 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!
4

2 回答 2

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;

请注意,在释放已删除的指针后将其无效是一个好主意,这样将来任何错误地取消引用它的尝试都将保证失败,并使错误更容易定位。

于 2013-05-08T12:18:39.193 回答
0

malloc应该与 配对free,并且new应该与 配对deletedelete会做一些不会做的额外事情free(例如调用析构函数),因此使用它来释放分配的内存malloc可能很糟糕。

于 2013-05-08T12:20:49.063 回答