使用memcpy()后是否需要删除内存?

时间:2017-10-22 07:07:09

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

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

这是我的尝试:

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

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

1 个答案:

答案 0 :(得分:1)

都能跟得上!

您不需要delete任何内容,因为您没有使用new分配任何内容。

请考虑以下代码段:

int x[10];

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

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

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

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