2011-10-31 9 views
2

Objective-C에서 다음과 같이 C 배열을 선언합니다.Objective-C에서 스택 기반 배열 선언?

int 길이 = 10;
int [길이];

이것은 Xcode에서는 오류가 발생하지 않지만 Visual Studio와 같은 다른 컴파일러는 발생하지 않습니다. 어떻게 작동하는지 알려주십시오. malloc/calloc을 대신 사용해야합니까?

답변

6

가변 길이 어레이가 C99에 도입되었습니다. Microsoft의 현재 컴파일러 (VC2010)는 C99 (또는 적어도 VLA 부분)을 지원하지 않습니다.

당신 사용 malloc 당신은 당신이 완료되면 free을 기억해야 할, 물건의 같은 종류의 작업을 수행합니다. 같은

뭔가 :

int length = 10; 
int *a = malloc (length * sizeof(int)); 
if (a == NULL) { 
    doSomethingIntelligentSinceNoMemoryLeft(); 
} else { 
    useToHeartsContent (a[0], "thru", a[9]); 
    free (a); 
} 

당신은 아마 또한 변수의 메모리 블록에 대한 스택에 공간을 할당한다는 점에서 블라스 유사하다 alloca를 사용할 수 있습니다.

하지만 너는 careful이어야합니다. alloca은 함수 종료시 자동 할당 해제를 제공하지만 일반적으로 스택은 malloc 힙보다 작은 리소스이며 힙을 모두 소모하면 NULL이 반환됩니다. 스택을 날려 버리면 충돌이 일어날 것입니다.

alloca(n)은 충분히 작은 값 n에 사용할 수 있습니다.

+1

'alloca()'를 사용하여 동적 크기의 스택 기반 할당을 수행 할 수도 있습니다. –

+0

@ 케빈 : 그렇습니다. 그 점 에까지 도달 할 것입니다. 그러면 스택을 날려 버릴 때 심하게 추락 할 것입니다 :-) 이것이 VLA에서도 마찬가지입니다. – paxdiablo

+0

글쎄요. Paxdiablo에게 감사드립니다. – roboleo