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

Cat*_*ore 0 c++ memory arrays memory-leaks memcpy

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

这是我的尝试:

int source_array[3] = {1,2,3}; 
int destination_array[3];
memcpy(destination_array, source_array, sizeof(source_array) * 3);
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*man 5

没有!

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


考虑以下片段:

int x[10];

void method() {
     int y[10];
     int *z = new int[10];
     delete z;
}
Run Code Online (Sandbox Code Playgroud)

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

第二个,int y[10],使用自动存储持续时间,由 cppreference 定义为:“该对象在封闭代码块的开头分配并在末尾释放。所有本地对象都有此存储持续时间,除了那些声明的对象之外静态、外部或 thread_local。”

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