【问题标题】:Do I need to delete memory after using memcpy()?使用 memcpy() 后是否需要删除内存?
【发布时间】:2018-04-02 22:36:59
【问题描述】:

我试图将一个数组的内容复制到另一个数组,但仅限于使用 memcpy() 函数。

这是我的尝试:

int source_array[3] = {1,2,3}; 
int destination_array[3];
memcpy(destination_array, source_array, sizeof(source_array) * 3);

问题是,我是否需要在关闭程序时对重复的数组执行 delete[] 以避免任何内存泄漏?

【问题讨论】:

  • memcpy() 本身不进行任何内存分配。
  • deletenew,和delete[]new[]。你既不做new 也不做new[]
  • 源数组和目标数组都在堆栈上分配,当超出范围时将自动释放。
  • 不要使用 memcpy,使用 std::copy。

标签: c++ arrays memory memory-leaks memcpy


【解决方案1】:

不!

你不需要delete 任何东西,因为你没有使用new 分配任何东西。


考虑以下 sn-p:

int x[10];

void method() {
     int y[10];
     int *z = new int[10];
     delete z;
}

第一个声明 int x[10] 使用静态存储持续时间,由 cppreference 定义为:“对象的存储在程序开始时分配,在程序结束时释放。仅存在该对象的一个​​实例。在命名空间范围(包括全局命名空间)声明的所有对象都具有此存储持续时间,加上那些用 static 或 extern 声明的对象。"

第二个,int y[10],使用自动存储持续时间,由 cppreference 定义为:“对象在封闭代码块的开头分配,在结尾释放。所有本地对象具有此存储持续时间,但声明为 static、extern 或 thread_local 的对象除外。"

第三个,int *z = new int[10],通常称为动态内存分配。 应显式释放动态内存分配

【讨论】:

    猜你喜欢
    • 2019-04-21
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多