不正确配对的函数示例

Improperly Paired Functions Example

本文关键字:函数 不正确      更新时间:2023-10-16

摘自本文档第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!

您应该调用free()来释放malloc()获得的内存。

delete算子只适用于new

,

ip= static_cast<int*>malloc(sizeof(int));
*ip= 12;
. . .
free(ip);

ip= new int;
*ip= 12;
. . .
delete ip;
ip = 0;

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

mallocfree配对,newdelete配对。delete将做一些free没有做的额外的事情(比如调用析构函数),所以用它来释放分配给malloc的内存可能是不好的。