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

标签 c++ arrays memory heap-memory

假设你有一个函数

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/

相关文章:

Java按扩展名对文件名的String数组进行排序

c++ - 虚拟析构函数规则

c++ - 如何从 CGAL::Triangulation_3 有效访问 std::list 中的顶点的 vertex_handle?

模板中的 C++ 数据类型

c++ - 语法错误 : missing ';' before identifier 'iDlg'

c++ - 拦截对 std::streambuf 的所有写入

arrays - Powershell中的奇怪脚本问题

java - 使用 charAt() 更改 char 数组

c# - 加载\查询大型序列化对象

c - 数组的内存分配