gpt4 book ai didi

objective-c - LLVM GCC 4.2 EXC_BAD_ACCESS

转载 作者:行者123 更新时间:2023-11-28 20:46:13 24 4
gpt4 key购买 nike

下面的代码在 GCC 4.2 上运行良好,但在 LLVM GCC 4.2 中因 EXC_BAD_ACCESS 而失败

- (double_t)readDouble  {
double_t *dt = (double_t *)(buffer+offset);
double_t ret = *dt; // Program received signal: EXC_BAD_ACCESS
offset += 8;
return ret;
}

我就是这样分配的

int dataLength = [data length];
buffer = malloc(dataLength + 1);
buffer[dataLength] = 0; // null terminate to log
[data getBytes:(void *)buffer length:[data length]];
//NSLog(@"%s", buffer);

Offset和buffer很像

@interface PRDataSet : NSObject {

NSMutableArray *tables;
NSMutableDictionary *tablesByName;
NSMutableDictionary *tablesById;

@private
NSURLConnection *conn;
int offset;
char *buffer;

}

是的,偏移量在范围内。我在使用缓冲区之前不会释放它。

有什么想法吗?

最佳答案

这可能是对齐问题。 ARM 处理器(以及许多其他处理器)对数据对齐有限制,例如它们只能从 4 或 8 的倍数的地址读取和写入 float 。

从您的代码中分配缓冲区的方式来看,它可能未正确分配,或者您的 double_t 数据元素未在缓冲区内对齐。

为了避免这个问题,您应该尝试先将数据复制到对齐的缓冲区中,然后从那里读取。

关于objective-c - LLVM GCC 4.2 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6072887/

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