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

如何在C语言中复制字节数组?附现有实现代码疑问

问题分析与解决方案

首先得指出你当前代码里的关键问题:你直接写 modifiedRawImageBytes = rawImageBytes; 这只是让新指针指向了原数组的内存地址,并没有真正复制字节数组的内容。这样后续修改 modifiedRawImageBytes 的时候,实际上是在修改原数组 rawImageBytes 的数据,完全不符合你“复制到新数组再修改”的需求。

正确的实现步骤

  • 第一步:为新数组分配足够的内存空间,大小和原数组一致(也就是传入的 size)
  • 第二步:将原数组的内容完整复制到新数组中
  • 第三步:对新数组进行你需要的修改操作

修正后的代码示例

假设你用的是C/C++环境,这里给出完整的可运行实现:

LOGI("FrameReceived will reach here 1");

// 1. 为新数组分配内存,务必检查分配是否成功
char* modifiedRawImageBytes = (char*)malloc(size);
if (modifiedRawImageBytes == NULL) {
    LOGI("Failed to allocate memory for modified image bytes");
    // 这里可添加错误处理逻辑,比如直接返回或终止操作
    return;
}

// 2. 把原数组的内容完整复制到新数组
memcpy(modifiedRawImageBytes, rawImageBytes, size);

// 3. 执行你的修改逻辑(补全你之前的代码逻辑)
jint sizeWH = width * height;
jint quarter = sizeWH / 4;
jint v0 = sizeWH + quarter;
for (int u = sizeWH, v = v0, o = sizeWH; u < v0; u++, v++, o += 2) {
    // 这里修改新数组的内容,示例操作可根据你的实际需求调整
    modifiedRawImageBytes[o] = rawImageBytes[u];
    modifiedRawImageBytes[o + 1] = rawImageBytes[v];
}

// 重要提醒:使用完新数组后,记得在合适的时机释放内存,避免泄漏
// free(modifiedRawImageBytes);

补充说明

  • 如果是C++环境,你也可以用 new[] 分配内存:char* modifiedRawImageBytes = new char[size];,释放时对应使用 delete[] modifiedRawImageBytes;
  • 内存分配的检查不能省略,否则遇到内存不足时会触发空指针异常
  • 内存释放要和分配操作严格对应,长期运行的程序尤其要注意避免内存泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:06:44