使用memcpy从data第6字节复制6字节到source_mac的代码错误排查咨询
memcpy从data第6字节复制6字节到source_mac的代码错误排查咨询
看起来你的代码有两个关键问题,我来帮你逐一拆解和修正:
指针引用错误:你当前使用的
&source_mac是取指针变量本身的内存地址,而不是指针指向的目标内存区域。source_mac本身只是一个存储内存地址的变量(通常占4或8字节),把6字节数据复制到这里会直接导致内存溢出,完全达不到你想把数据存入source_mac指向空间的目的。
正确的做法是直接使用source_mac作为目标地址,但前提是你已经为它分配了足够的内存空间——要么提前定义一个固定大小的数组,要么用动态内存分配:// 方式1:用固定数组 uint8_t source_mac[6]; // 方式2:动态分配内存(记得用完后用free(source_mac)释放) uint8_t *source_mac = malloc(6); if (source_mac == NULL) { // 处理内存分配失败的情况,比如返回错误码 return -1; }数组索引偏移错误:C语言的数组是从0开始计数的。如果你想从
data的第6个字节(按1开始计数)开始复制,对应的索引应该是data[5],而不是data[6]——data[6]实际上指向的是第7个字节,这会导致你复制的起始位置偏了1个字节。
把这两个问题修正后,正确的memcpy调用应该是这样的:
memcpy(source_mac, &data[5], 6);
另外还要注意:必须确保data指向的内存区域至少包含5 + 6 = 11字节的有效数据,否则会出现内存越界读取的未定义行为。
备注:内容来源于stack exchange,提问作者hannah
相关产品推荐
相关产品推荐

