Ci-dessous le code fonctionne très bien sur GCC 4.2, mais échoue avec EXC_BAD_ACCESS dans 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;
}
Voilà comment j'allouer
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 et le tampon est comme
@interface PRDataSet : NSObject {
NSMutableArray *tables;
NSMutableDictionary *tablesByName;
NSMutableDictionary *tablesById;
@private
NSURLConnection *conn;
int offset;
char *buffer;
}
Oui le décalage est dans la plage. Je ne libère pas le tampon avant de l'utiliser.
Des idées?
Vous avez raison. Il s'agit de l'alignement en virgule flottante. Mon tampon est configuré à partir de différents types de données, donc je n'ai pas pu aligner le tampon. La solution lit un nombre entier, puis les convertit en nombres à virgule flottante. Je pense que c'est ce que GCC a fait. LLVM ne fait pas cette correction mais je pense que cela devrait être le cas dans le futur. Les développeurs n'ont pas besoin de connaître les restrictions du processeur. C'est ce que les compilateurs sont pour. –