配对功能不正确的示例

0 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!
Run Code Online (Sandbox Code Playgroud)

Rog*_*and 6

你应该要求free()释放获得的记忆malloc().

delete操作仅适用new.

所以,要么

ip= static_cast<int*>malloc(sizeof(int));
*ip= 12;
. . .
free(ip);
Run Code Online (Sandbox Code Playgroud)

要么

ip= new int;
*ip= 12;
. . .
delete ip;
ip = 0;
Run Code Online (Sandbox Code Playgroud)

请注意,删除指针在释放后取消它是个好主意,以便将来错误地取消引用它的任何尝试都将保证失败并使错误更容易找到.