Objective-C에서 다음과 같이 C 배열을 선언합니다.Objective-C에서 스택 기반 배열 선언?
int 길이 = 10;
int [길이];
이것은 Xcode에서는 오류가 발생하지 않지만 Visual Studio와 같은 다른 컴파일러는 발생하지 않습니다. 어떻게 작동하는지 알려주십시오. malloc/calloc을 대신 사용해야합니까?
Objective-C에서 다음과 같이 C 배열을 선언합니다.Objective-C에서 스택 기반 배열 선언?
int 길이 = 10;
int [길이];
이것은 Xcode에서는 오류가 발생하지 않지만 Visual Studio와 같은 다른 컴파일러는 발생하지 않습니다. 어떻게 작동하는지 알려주십시오. malloc/calloc을 대신 사용해야합니까?
가변 길이 어레이가 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
에 사용할 수 있습니다.
'alloca()'를 사용하여 동적 크기의 스택 기반 할당을 수행 할 수도 있습니다. –
@ 케빈 : 그렇습니다. 그 점 에까지 도달 할 것입니다. 그러면 스택을 날려 버릴 때 심하게 추락 할 것입니다 :-) 이것이 VLA에서도 마찬가지입니다. – paxdiablo
글쎄요. Paxdiablo에게 감사드립니다. – roboleo