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

C语言在结构体指针内实现数组拷贝时结果异常如何排查

错误定位

问题出在CreateNumArray里的memcpy调用,拷贝长度参数传错了。
memcpy的第三个参数要求传入待拷贝内容的总字节数,你当前写的是memcpy(numarray->data, nums, size),传入的是数组元素个数,不是实际需要的字节长度。
你使用的gcc 11.2.0环境下int类型占4字节,测试时传入元素个数为4,实际仅拷贝了4字节内容,刚好够完整写入第一个int元素1,后续数组元素对应的内存没有被拷贝覆盖,读取的是malloc分配的未初始化脏内存里的随机值,因此输出乱码。

修正方案

把memcpy那行代码修改为传入正确的总字节长度即可:

// 原错误写法:memcpy(numarray->data, nums, size);
memcpy(numarray->data, nums, size * sizeof(int));

修改后重新编译运行,测试代码就会正常输出1 2 3 4。

实用小技巧:写memcpy长度参数时可以用size * sizeof(*目标指针)的通用写法,比如这里就可以写成memcpy(numarray->data, nums, size * sizeof(*numarray->data)),后续就算data指针指向的类型调整,这行代码也不需要同步修改,能避免很多长度写错的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:06:22