首页 > 解决方案 > 将指针传递给压缩结构成员时发出警告

问题描述

我想将对packed结构的引用传递给函数。不幸的是,编译器(gcc 9.3.0)不喜欢我的想法并抱怨指针未对齐。我明白这意味着什么,但我不知道如何解决它。

struct map {  
   ...
   int32_t xy;
   ...
} __attribute__((__packed__));

void Test::write(int32_t* addr, const int32_t &value) {
  int64_t beval = htobe64(value);
  memcpy(addr, &beval, sizeof(beval));
}

int32_t val32 = 123;
write(&map.xy, val32);
warning: taking address of packed member of ‘Test::map’ may result in an unaligned pointer value [-Waddress-of-packed-member]
   xx |     write(&map.xy, val32);
      |           ^~~~~~~~~~~~~~~~

标签: c++pointersstructmemory-alignment

解决方案


我不知道如何解决它。

不要接受它的地址,不要打包map,或者接受你的程序可能有未定义的行为。


推荐阅读