下面的代碼運行在GCC 4.2得很好,但未能與EXC_BAD_ACCESS在LLVM GCC 4.2LLVM 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);
偏移和緩衝就像是
@interface PRDataSet : NSObject {
NSMutableArray *tables;
NSMutableDictionary *tablesByName;
NSMutableDictionary *tablesById;
@private
NSURLConnection *conn;
int offset;
char *buffer;
}
是偏移在範圍內。 我在使用之前沒有釋放緩衝區。
任何想法?
你是對的。它關於浮點對齊。我的緩衝區是從不同的數據類型設置的,所以我無法對齊緩衝區。解決方法是讀取整數,然後轉換爲浮點數。我認爲這就是GCC所做的。 LLVM不會做這種修正,但我認爲它應該在未來。開發人員不需要知道處理器限制。這是編譯器的目的。 – 2011-05-21 13:45:51