gpt4 book ai didi

c++ - 如果我将指针设置为 NULL,则两次释放同一指针不会出错

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:38 24 4
gpt4 key购买 nike

我尝试两次释放同一个指针,但都失败了,但如果我按照相同的步骤而不将其设为 NULL,代码运行正常。

 #include <iostream>

struct MyClass {
MyClass() {std::cout << "Allocated and Constructed" << std::endl ;}
};

int main () {
// allocates and constructs five objects:
MyClass * p1 = new MyClass[5];

delete[] p1;
delete[] p1; // The code will succeed if I comment this line of code
p1=NULL;
delete[] p1;
delete[] p1;

return 0;
}

我看到问题的一个很好的答案 What happens when you deallocate a pointer twice or more in C++?但是如果我将它设为 NULL,是什么让它运行,这两种情况不应该遵循相同的行为?

最佳答案

你只需要释放你分配的东西。您使用 new[] 分配了五个 MyClass 实例。所以这就是您需要解除分配的内容。

您没有释放任何指针。指针不需要被释放,除非您动态分配它们,并且您的代码不会动态分配任何指针。

当您将指针设置为nullptr(或NULL)时,它不指向任何东西。所以对其调用 delete 没有任何效果。 C++ 标准选择在空指针上调用 delete(或 delete[])什么也不做。

关于c++ - 如果我将指针设置为 NULL,则两次释放同一指针不会出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33118895/

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