0

我在使用地址引用填充结构成员时遇到问题,但是当它使用它自己的成员完成时,它就很好了。

带结构件

memcpy(&(AVPFieldStructureObj->resource_value),data_start,actual_data_length);

带内存地址

memcpy((&AVPFieldStructureObj+fieldOffset),data_start,actual_data_length);

其中 actual_data_length 是变量的大小,data_start 是指向数据缓冲区的指针。

内存在我打印字段时给出垃圾值并且在执行整个之后我得到一个分段错误但是当使用 GDB 调试时程序正常退出。没有分段错误

请建议

提前致谢

问候, Soheb

4

1 回答 1

0

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

如果你正在做类似的事情:

Type* pointer = somewhere;
pointer += 3;

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

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

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

于 2010-11-27T14:04:36.597 回答