2014-12-20 2 views
-2
main() 
{ 
     int n; 
     scanf("%d",&n); 
     char a[n]; 
} 

이 경우 런타임 동안 메모리를 'a'로 할당하지 않고 malloc을 사용해야하는 이유는 무엇입니까 ??malloc을 사용하지 않고 런타임에 메모리를 할당 할 수 있습니까?

+0

실제로 내부적으로 컴파일러는 가능한 경우 스택에 스토리지를 할당하려고 시도하는 alloca()로 변환합니다. 그렇지 않은 경우 일반 malloc을 사용할 수 있습니다. 두 번째 경우에는 스택 프레임이 무너질 때 regular free()를 호출합니다. – Anonymous

+0

나는이 질문이 연결된 질문의 속임수라고 생각하지 않는다. – haccks

+0

이것은 dup이라는 것에 동의하지 마십시오. 가변 길이 배열에는 다른 답변에서 다루지 않는 특정 문제가 있습니다. – Tony

답변

1

char a[n]은 구형 C 표준에서 사용할 수 없습니다. C99에서는 허용되지만 자동 변수 (예 : 스택의 경우)에 대해서만 허용됩니다. 전역 변수를 원하면 malloc 등을 사용해야합니다. al. 표준 준수. 몇 가지 증거가있다

를 제공 할

편집 한 helpful 두 번째 기사에서 C에서 가변 길이 배열에 대한 seriesofarticles, "변수 (정적 또는 통근 반대) 블라스 자동해야합니다 블록."

관련 문제