将数组复制到动态分配的内存

标签 c arrays memory pointers dynamic

我的代码可以正常工作,但我觉得似乎有更快的方法来执行此操作,尤其是在我的函数副本中。这是我的代码。这可以更快吗?这是在 C 顺便说一句。另外,当我从函数返回 cpy 时,它是否会删除动态内存,因为它超出了范围?我不想有内存泄漏 :P

#include <stdio.h>
#include <stdlib.h>
double *copy(double a[], unsigned ele);
int main(){
    double arr[8], *ptr;
    unsigned i=0;
    for(;i<7;i++){
        scanf_s("%lf", &arr[i]);
    }
    ptr=copy(arr, 8);
    for(i=0;i<7; i++)
        printf("%f", ptr[i]);

}

double *copy(double a[], unsigned ele){
    double *cpy= malloc(sizeof(double)*ele);
    int i=0;
    for(;i<ele; i++)
        cpy[i]=a[i];
    return cpy;
}

最佳答案

您可以用 memcpy 替换您的 for

memcpy(cpy, a, ele * sizeof *cpy);

除此之外,您所做的还不错:您正在返回一个指针,因此调用者有机会释放它。

此外,我认为如果您要退出,最好不要调用 free - 操作系统无论如何都会收集内存。

关于将数组复制到动态分配的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10577787/

相关文章:

c - 重新编码 malloc 和页面大小

C 程序仅接受整数 1-42 到数组中,并且它们不能在函数中重复

python - 在处理 python 列表分配时最小化内存消耗

c++ - 如何在运行时确定 c++ 对象的内存

c# - 如何使用 C# 查找系统缓存和空闲内存

c - 为什么在创建链接列表节点的函数中传递结构指针参数不起作用?

C99, "Despite the name, a non-directive is a preprocessing directive."

c - 当一个参数通过另一个参数的引用传递时,printf 如何处理它的参数

Javascript - 根据过滤器对象中存在的任何深度的属性过滤对象数组的通用解决方案

java - Android 将 JSONArray 转换为字符串数组