使用 memcpy() 后是否需要删除内存?
Do I need to delete memory after using memcpy()?
我试图将一个数组的内容复制到另一个数组,但仅限于使用 memcpy() 函数。
这是我的尝试:
int source_array[3] = {1,2,3};
int destination_array[3];
memcpy(destination_array, source_array, sizeof(source_array) * 3);
问题是,关闭程序时是否需要跟进对重复数组的删除[]以避免任何内存泄漏?
不!
您不需要 delete
任何东西,因为您没有使用 new
.
分配任何东西
考虑以下片段:
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],通常称为动态内存分配。 应显式释放动态内存分配。
我试图将一个数组的内容复制到另一个数组,但仅限于使用 memcpy() 函数。
这是我的尝试:
int source_array[3] = {1,2,3};
int destination_array[3];
memcpy(destination_array, source_array, sizeof(source_array) * 3);
问题是,关闭程序时是否需要跟进对重复数组的删除[]以避免任何内存泄漏?
不!
您不需要 delete
任何东西,因为您没有使用 new
.
考虑以下片段:
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],通常称为动态内存分配。 应显式释放动态内存分配。