내가 발견 한 일부 동작에 대한 테스트를 수행했으며, 어떤 일이 일어나고 있는지 이해할 수 있는지 궁금합니다.가변 길이 배열을 사용할 때 Objective-C EXEC_BAD_ACCESS
나는 다음과 같습니다 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;
}
그것은 잘 작동합니다. 나는이에 구조체 선언을 변경할 때 : 내가 선 [a release]
를 호출 할 때
typedef struct {
float myVar;
int size;
float floats[];
} myStruct;
나는 EXEC_BAD_ACCESS를 얻을.
아무도 내가 무슨 일이 일어나고 있는지 이해할 수 있습니까?
하지만 스택에 있지는 않습니다. 완료되면 무료로 보내주십시오! – deanWombourne
@deanWombourne - 예. OP가 어떤 이유로 스택 할당을 정말로 필요로한다면'alloca()'가 도움이 될 것입니다. –
감사! 나는 뭔가를 놓친다는 것을 알았다. :) –