이 질문은 이전에 요청했지만 검색을 통해 찾을 수 없었습니다. 사전에 불편을 끼쳐 드려 죄송합니다.C 배열 인스턴스화 - 스택 또는 힙 할당?
컴파일 타임에 개체의 크기를 알면 스택에만 할당한다는 것은 잘못된 것입니다. 배열을 초기화하는 경우에 그래서, 당신은이 중 하나를 할 수있는 (그리고 이것은 스택에 가야한다)이 배열의 크기는 컴파일 타임에 알려져 있기 때문에
이char charArray[50];
이 아무 문제가 없습니다.
한편이 (내가 믿는)도 유효 코드 :
char anotherCharArray[someVariable + 50];
이뿐만 아니라 스택에 가시겠습니까? 나는 코드를 segfaults한다고 확신한다. 왜냐하면이 코드를 자유롭게하면 (그렇게) 생각하게 만든다. 그러나 실제로 나에게 의미가 없다. 마찬가지로 데이터가 malloc을 통해 할당되었을 때 free()를 사용해야하는 100 % 유일한 상황입니까?
미리 도움을 주셔서 감사합니다.
@Shookit : 로컬 변수 또는 전역 변수 중 어느 것을 사용할지 지정해야합니다. –
@PaulR 배열이 가변 길이이면 전역 범위에있을 수 없습니다. –
데이터를 저수준 저장하는 * 자동 저장 *과 * 스택 *을 구별해야합니다. 자동 저장 장치에 저장된 데이터는 레지스터와 마찬가지로 다른 위치에 배치 될 수 있습니다. 크기가 알려지지 않은 로컬 배열 (VLA : s라고 함)의 경우 컴파일러는 스택에 배치 할 수 있으며 힙에 메모리를 할당 할 수도 있습니다 (적절한 위치에서 해제 할 때까지). 사실, VLA :는 setjmp/longjmp와 잘 어울리지 않아 누출 될 수 있습니다 (C 표준에서 허용). – Lindydancer