C++ 不正确配对的函数示例

C++ 不正确配对的函数示例,c++,memory-leaks,C++,Memory Leaks,本文件第41页: 为什么下面的删除不正确 ip= static_cast<int*>malloc(sizeof(int)); *ip= 12; . . . delete ip; // wrong! ip=static_castmalloc(sizeof(int)); *ip=12; . . . 删除ip;//错了! 您应该调用free()来释放使用malloc()获取的内存 delete运算符仅适用于new 所以,也 ip= static_cast<int*>mallo

本文件第41页:

为什么下面的删除不正确

ip= static_cast<int*>malloc(sizeof(int));
*ip= 12;
. . .
delete ip; // wrong!
ip=static_castmalloc(sizeof(int));
*ip=12;
. . .
删除ip;//错了!
您应该调用
free()
来释放使用
malloc()获取的内存

delete
运算符仅适用于
new

所以,也

ip= static_cast<int*>malloc(sizeof(int));
*ip= 12;
. . .
free(ip);
请注意,在删除的指针释放后将其置零是一个好主意,这样将来任何错误地取消引用它的尝试都将保证失败,并使错误更容易定位。

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

delete
运算符仅适用于
new

所以,也

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

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

malloc
应与
free
配对,而
new
应与
delete
配对
delete
会做一些
free
没有做的额外事情(比如调用析构函数),因此使用它来释放分配给
malloc
的内存可能不好。

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

你链接的演示文稿的第40张幻灯片非常清晰。你忘记了要转换的表达式周围的括号。我认为OP的问题是“为什么这是一个安全漏洞”在第40张幻灯片上有说明。@Seb谢谢你,这很有帮助。@Joa,这是一个复制和粘贴的过程。你链接的演示文稿的第40张幻灯片非常清晰。你忘了在表达式周围加括号。我想OP的问题是“为什么这是一个安全漏洞?”“第40张幻灯片上说明了这一点。@Seb谢谢,这非常有帮助。@乔,这是复制粘贴的。