Secure-Coding-C-DCL-5 C 언어 시큐어코딩 - Declare and Initialization 5 올바른 구문을 사용하여 가변 길이 배열 선언 가변 길이 배열은 하나 이상의 멤버가 있는 구조의 마지막 요소가 불완전한 특별한 유형의 배열이다. 즉, 배열의 크기가 구조 내에서 명시적으로 지정되어 있지 않다. 가변 길이 배열 구조 정의 시 몇 가지 제한 사항이 존재한다. 불완전한 배열 유형은 구조 내의 마지막 요소 여야 한다. 가변 길이 배열 멤버가 포함된 구조체 배열은 있을 수 없다. 가변 길이 배열 멤버가 포함된 구조체는 다른 구조체의 멤버로 사용할 수 없다. 구조체에는 가변 길이 배열 멤버 외에 하나 이상의 명명된 멤버가 있어야 한다. 잘못된 코드 예제 C 표준에서 가변 길이 배열을 도입하기 전에 유사한 요소를 얻기 위해 단일 요소 배열을 최종 멤버로 사용하는 구조가 사용되었었다. 예제는 하나의 요소을 가진 배열을 가변 길이 배열과 같이 최종 멤버를 할당하려고 시도한다. 구조체가 인스턴스화되면 malloc() 에 계산된 크기가 동적 배열의 실제 크기를 고려하여 수정된다. # include <stdlib.h> struct flexArrayStruct { int num ; int data [ 1 ] ; } ; void func ( size_t array_size ) { /* Space is allocated for the struct */ struct flexArrayStruct * structP = ( struct flexArrayStruct * ) malloc ( sizeof ( struct flexArrayStruct ) + sizeof ( int ) * ( array_size - 1 ) ) ; if ( structP == NULL ) { /* Handle malloc failure */ } ...