You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将静态数组复制到动态分配内存?示例中b为何未存储1.、2.?

问题原因

你的代码错误出在memcpy的第三个参数传值不正确:
memcpy的第三个参数代表需要复制的内存总字节数,而你只传了LEN=2,仅会复制2个字节的内容。常见64位平台下单个double类型就占8字节,整个a数组总大小是2*8=16字节,仅复制前2字节完全不足以存储完整的double数值,剩下的内存区域是malloc申请的未初始化脏数据,所以输出结果不符合预期。

修复方案

把memcpy调用行修改为以下任意一种即可:

// 方式1:乘以单个double类型的大小,得到总字节数
memcpy(b, a, LEN * sizeof(double));
// 方式2:用指针指向的类型计算大小,扩展性更好
memcpy(b, a, LEN * sizeof(*a));
memcpy(b, a, LEN * sizeof(*b));
额外优化建议
  • 标准C规范中main函数的返回值应为int,而非void,建议修改为int main()并在末尾添加return 0;
  • malloc申请内存后需要判空,避免申请失败导致空指针访问
  • 动态申请的内存使用完后需要调用free(b)释放,避免内存泄漏
修复后完整代码
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

#define LEN 2

int main() {
    double a[LEN] = {1, 2};
    double* b = malloc(LEN * sizeof(*b));
    if (b == NULL) {
        perror("malloc failed");
        return 1;
    }

    memcpy(b, a, LEN * sizeof(*b));
    for (size_t i = 0; i < LEN; i++)
    {
        printf("%.2f ", b[i]);
    }
    printf("\n");
    
    free(b);
    return 0;
}

运行后输出结果为:

1.00 2.00 

内容的提问来源于stack exchange,提问作者fhchl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:57:03