我在使用地址引用填充结构成员时出现问题,但是当使用该成员完成它时,它会很好。
结构记忆
memcpy(&(AVPFieldStructureObj->resource_value),data_start,actual_data_length);
带内存地址
memcpy((&AVPFieldStructureObj+fieldOffset),data_start,actual_data_length);
其中actual_data_length是varibale的大小,data_start是指向数据缓冲区的指针。
带内存它在打印字段时给出垃圾值,在执行整个后我得到了分段错误但是在用GDB调试时程序正常退出。没有分段错误
请建议
提前致谢
此致 Soheb
答案 0 :(得分:0)
我相信fieldOffset
是以字节为单位的偏移量?
如果您正在执行以下操作:
Type* pointer = somewhere;
pointer += 3;
然后pointer
向前移动3*sizeof(Type)
个字节 - 所以3 Type
个对象向前移动。
因此,在您的代码中,在后一种变体中,您不是将地址偏移fieldOffset
个字节,而是偏移fieldOffset*sizeof(AVPFieldStructureObj)
个字节。
您可以通过临时转换为指向char*
的指针来解决此问题。