不正确配对的函数示例
Improperly Paired Functions Example
摘自本文档第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;
请注意,在已删除的指针被释放后使其无效是一个好主意,这样以后任何试图错误地解引用它的尝试都将保证失败,并使错误更容易定位。
malloc
与free
配对,new
与delete
配对。delete
将做一些free
没有做的额外的事情(比如调用析构函数),所以用它来释放分配给malloc
的内存可能是不好的。
相关文章:
- g++ 说函数不存在,即使包含正确的标头
- 将参数传递给泛型 lambda 时复制构造函数不正确
- 非静态成员函数的 decltype 格式不正确吗?
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- 我的动态链接队列在同一输出流中调用时不正确地输出三个返回函数
- 编译器在构造函数中计算的成员偏移量不正确
- 为什么在template函数广播中把两个extensor表达式加在一起不正确
- 从模板化类虚拟函数中调用的模板函数不正确
- 为什么不调用预期的函数?我是否对类型特征的理解不正确?
- 将函数的地址转换为UINTPTR_T给我不正确的结果
- 模板实例化失败:编译器选择不正确的重载函数
- 为什么构造函数C++接受不正确的类型作为参数?
- 不正确的输出和变量未用Eclipse CDT初始化构造函数
- 不正确的成员构造函数定义
- 调用求和或获取乘积的函数不正确
- 当const在另一行处的const时,doxygen parse const成员函数不正确
- 模板中调用的虚拟函数不正确
- C++将数组传递给函数不正确
- 构造函数不正确和隐式删除
- c++ If, else If不读else If.或发现函数不正确