gpt4 book ai didi

施法增加所需的目标类型对齐

转载 作者:行者123 更新时间:2023-12-04 01:47:23 25 4
gpt4 key购买 nike

我正在 ARM 上编程,并且有以下代码片段(在 C 中):

struct data {
int x;
char y[640];
};
unsigned int offset = 819202;
char *buf; // buf is assigned an address elsewhere in the code
struct data * testdata = (struct data *)(buf + offset)

我收到以下编译错误:

error: cast increases required alignment of target type [-Werror=cast-align]


testdata指针需要指向包含 struct data 类型数据数组的内存部分.所以我需要一个指针,以便稍后我可以将索引应用于 testdata . Offset 在程序中是硬编码的。 buf作为共享内存从另一个进程接收。

例如,稍后在代码中我有:
testdata[index].x = 100;

我在 SO 上看到了一些例子,但我不确定处理这个问题的正确方法是什么。有什么建议 ?

最佳答案

cast-align当您尝试从具有较小对齐方式的类型转换为具有较大对齐方式的类型时,会触发警告。在这种情况下,您来自 char它有对齐方式 1 和 struct data其中(因为它包含 int )具有对齐 4(假设 int 是 4 个字节)。

与其将指向结构体的指针指向字符数组,不如使用 memcpy从缓冲区复制到结构的实例中。

struct data testdata;
memcpy(&testdata, buf + offset, sizeof(testdata));

关于施法增加所需的目标类型对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54758457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com