[英]Copying data using memcpy
我正在為upclsf做一個clsf_ptr的memcpy
memcpy(&upclsf, &clsf_ptr, sizeof(struct classifier));
在使用gdb進行調試的時候,我檢查了upclsf的內存地址,當時我打印了up&upclsf
(gdb) p &upclsf
$1 = (struct classifier **) 0xbffff184
當我打印upclsf我得到了
(gdb) p upclsf
$2 = (struct classifier *) 0x2e312e31
這里的地址是我無法理解的,這里upclsf是結構分類器的一個實例
GDB不同意 - upclsf
不是struct classifier
,它是一個指針。 請注意,這兩個答案有不同的類型。 第一個( &upclsf
)是struct classifier **
,第二個( upclsf
)是struct classifier *
。 這是內存布局:
addr 0xbffff184 / upclsf: pointer to 0x2e312e31
addr 0x2e312e31 / *upclsf: (structure data)
您想將memcpy
更改為:
memcpy(upclsf, &clsf_ptr, sizeof(struct classifier));
或者可能:
memcpy(upclsf, clsf_ptr, sizeof(struct classifier));
請注意, memcpy
將大肆破壞數據,並且不是類型安全的! 因此,在使用它時必須格外小心,以確保您提供的類型是正確的。 我建議定義以下功能:
static inline void
classifier_copy(struct classifier *dest, struct classifier const *src)
{
memcpy(dest, src, sizeof(*dest));
}
這將捕獲類型錯誤。 對於我復制一次或兩次以上的任何結構,我都會制作其中一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.