Я провел некоторое тестирование на обнаруженном мной поведении, и мне было интересно, если кто-нибудь может помочь мне понять, что происходит.
У меня есть структура, которая называется myStruct
, которая выглядит следующим образом:
typedef struct {
int size;
float floats[];
} myStruct;
И я запускаю этот код на нем:
int main () {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSArray *a = [[NSArray alloc] initWithObjects:@"0.2", @"0.5", @"0.5", nil];
NSLog(@"%@", a);
myStruct my;
my.size = a.count;
my.floats[0] = [[a objectAtIndex:0] floatValue];
my.floats[1] = [[a objectAtIndex:1] floatValue];
my.floats[2] = [[a objectAtIndex:2] floatValue];
NSLog(@"{ %lf, %lf, %lf }", my.floats[0], my.floats[1], my.floats[2]);
[a release];
[pool drain];
return 0;
}
Работает нормально.Однако, когда я изменяю объявление структуры на это:
typedef struct {
float myVar;
int size;
float floats[];
} myStruct;
, я получаю EXEC_BAD_ACCESS, когда я вызываю строку [a release]
.
Может кто-нибудь помочь мне понять, что здесь происходит?