我对粘贴的代码有疑问。我已经为一个 int 分配了内存并删除了(像往常一样)。但是我在某个地方看到了这个 sysntax(line 1),它分配了一个匿名的 int 空间。怎么释放这个空间,这样不会造成内存泄露吗?
main(){
int *p = new int;
new int;
if(p)
delete p;
system("PAUSE");
return 0;
}
如果您分配内存,并故意选择不持有指向它的指针,那么您就无法释放它。
C++ 给了你足够的绳子让你上吊,让你拿枪对准自己的脚。
这不是什么新鲜事。
另一个错误是检查p
的值是否分配成功。
只有在较旧的编译器上,new
才会在失败时返回 NULL
。在较新的编译器上,失败的 new
将导致抛出 std::bad_alloc
异常。
所以在这段代码中,(假设您使用的是过去十年的编译器)您知道:
new
成功,p
有效/非 NULL。
- 或抛出异常。
p
不可能以 NULL
结尾!
即使 p
可能以 NULL 结尾,在 NULL
值上调用 delete
也是绝对安全的,没有任何问题。
因此您的示例代码很可能是:
int main()
{
int *p = new int; // Will throw exception if fails
new int; // Deliberate Mem Leak
delete p; // No need to check NULL
system("PAUSE"); // Pause to see results (NOTE: this is skipped if an exception is thrown!)
return 0;
}
我是一名优秀的程序员,十分优秀!