C中的内存地址的种群结构

时间:2010-11-27 14:00:18

标签: c pointer-arithmetic

我在使用地址引用填充结构成员时出现问题,但是当使用该成员完成它时,它会很好。

结构记忆

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

1 个答案:

答案 0 :(得分:0)

我相信fieldOffset是以字节为单位的偏移量?

如果您正在执行以下操作:

Type* pointer = somewhere;
pointer += 3;

然后pointer向前移动3*sizeof(Type)个字节 - 所以3 Type个对象向前移动。

因此,在您的代码中,在后一种变体中,您不是将地址偏移fieldOffset个字节,而是偏移fieldOffset*sizeof(AVPFieldStructureObj)个字节。

您可以通过临时转换为指向char*的指针来解决此问题。