gpt4 book ai didi

c++ - 您可以删除在堆上创建并由函数返回的数组吗?

转载 作者:行者123 更新时间:2023-11-30 05:19:27 24 4
gpt4 key购买 nike

假设你有一个函数

int * something ( int size ){
int * sample= new int[size];
//... do something
return sample;
}

然后如果在其他地方使用它

...

Int * temp=something(5);
// use the array....


delete [] temp;

....

这会导致内存泄漏吗??

最佳答案

这是合法的,但很容易出错,因为如果正在分配的数组和正在释放的同一数组之间存在异常,则存在内存泄漏的风险。最好使用智能指针使此代码异常安全。

是的,只要您使用相同类型的指针,您就可以删除[]之前new[]的内容因为指针仍然指向相同的地址 并且 该数组尚未在您的代码中的其他地方释放(所谓的“双重释放”问题)。必须满足所有三个要求,否则您会遇到未定义的行为,然后所有赌注都将关闭。

关于c++ - 您可以删除在堆上创建并由函数返回的数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41102543/

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