2013-08-05 5 views
-2

이것은 동적 배열을 선언하는 유효한 코드이기도합니다.const int를 사용하는 동적 배열

malloc에는 포인터가 필요합니다. 이게 더 좋은 방법인가요?

printf("enter the size of array") 
scanf("%d",&x) 
const int size 
size = x 
int array[size] 
+0

내가 아는 바로는, VLA는 실행시에 정확히'malloc() '과 같다. 또한 왜 포인터가 잘못되었다고 생각합니까? VLA를 사용하고 있음에 유의하십시오. 이는 C99 표준에 따라 유효한 코드입니다. –

+0

누락 된 세미콜론을 추가하더라도 해당 코드는 컴파일되지 않습니다. –

+0

@TomTanner는 컴파일되지 않을 것이라고 말했기 때문에 더 좋은 방법은 아닙니다. –

답변

1

하나가 다른 것보다 더 나은 경우 (더 나은 질문은, 당신이 당신의 요구 사항에 있지만 가변 길이 배열을 malloc을 사용하고 사용을 기반으로 결정하기 위해 각각의 장점을 필요로하는 어떤 것 VLA 말을하기 어렵다)는 동일하지 않습니다.

몇 가지 중요한 차이점이 있습니다. 1) VLA는 구현 결정이지만 일반적으로 스택에 할당됩니다. 표준에서는 단지 automatic이 있다고합니다. 스택은 malloc 어레이가있는 힙보다 더 제한되어 있으므로 스택을 쉽게 오버플로 할 수 있습니다. 2)malloc 배열을 해제해야합니다. VLA는 자동 변수이고 선언 된 범위 외부에 존재하지 않습니다. 3) VLA는 C99 standard의 일부이므로 VLA을 사용하는 코드는 portable이 아닙니다.