gpt4 book ai didi

c++ - 通过函数取消分配内存 - 对吗?

转载 作者:太空狗 更新时间:2023-10-29 19:56:05 25 4
gpt4 key购买 nike

我只是有点困惑为什么当我试图通过函数删除一个新分配的变量时打印相同的内存地址,我猜测没有内存泄漏或指针悬挂。

打印了相同的内存地址。

#include <iostream>

using namespace std;

void deallocater(int *p)
{
delete p;
p = nullptr; // memory deleted and no dangling pointer right?
}

int main()
{
int *x = new int(1);
cout<<x;
deallocater(x);

cout<<endl<<x; // why is the same memory address being printed?

return 0;
}

我假设该函数成功运行

最佳答案

调用函数

void deallocater(int* p)
{
delete p;
p = nullptr;
}

通过

deallocater(x);

x的值复制到p。因此,在 deallocater() 中,局部变量 p 被赋值为 nullptr。但是,调用程序的变量 x 没有改变。

您可以通过引用参数来实现您想要的效果:

void deallocater(int* &p)
{
delete p;
p = nullptr;
}

但是,内存分配和取消分配不应拆分为不同且不相关的函数,以避免悬空指针和/或内存泄漏的危险。相反,好的 C++ 代码几乎不包含任何 delete 语句和少量 new 语句(用于初始化智能指针),而是使用标准库结构(容器和智能指针)进行内存管理.

关于c++ - 通过函数取消分配内存 - 对吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55997685/

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