gpt4 book ai didi

C++ 编程 - 这种分配是不可避免的内存泄漏吗?

转载 作者:太空宇宙 更新时间:2023-11-04 14:38:05 25 4
gpt4 key购买 nike

我对粘贴的代码有疑问。我已经为一个 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;
}

关于C++ 编程 - 这种分配是不可避免的内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23784674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com