gpt4 book ai didi

objective-c - 与结构对齐相关的 EXC_BAD_ACCESS?

转载 作者:可可西里 更新时间:2023-11-01 04:40:23 25 4
gpt4 key购买 nike

在 iOS 应用程序中,我有一个看起来像这样的结构

typedef struct _Pixel {
signed char r;
signed char g;
signed char b;
} Pixel;

在我的代码中,我使用 calloc 分配了一个数组:

Pixel* buff = calloc(width * height, sizeof(Pixel));

现在,这在模拟器中完美运行,但在设备上,如果我尝试访问 buff[width * height - 1](即 buff 中的最后一个元素>),我得到一个 EXC_BAD_ACCESS

这对我来说没有意义,所以经过几个小时的调试,我想知道这是否是某种对齐问题,所以心血来潮我试了一下:

typedef struct _Pixel {
signed char r;
signed char g;
signed char b;
signed char padding;
} Pixel;

使 Pixel 的大小成为 2 的幂。

这修复了 EXC_BAD_ACCESS,但它非常奇怪。有没有人对这里发生的事情有任何了解?我只是通过填充结构来掩盖潜在的问题,还是对齐真的会导致错误的访问(我认为对齐只对性能有影响,对正确性没有影响)。

最佳答案

EXC_BAD_ACCESS is related to alignment.与 x86 不同,ARM 要求内存访问与特定边界对齐。

要控制对齐,请使用 #pragma push#pragma pack(n)#pragma pop

参见 http://tedlogan.com/techblog2.html

关于objective-c - 与结构对齐相关的 EXC_BAD_ACCESS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9255295/

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