- 구조체의 멤버 변수를 가변 배열로 설정하고 싶을 때 사용한다.
- 배열은 struct의 제일 마지막 멤버로 존재해야 한다.
- 배열 이외의 다른 멤버 변수가 적어도 하나 존재해야 한다.
사실 예제코드로 보는 게 제일 편하다.
struct person
{
int length;
char name[];
};
struct person *me = malloc(sizeof(person) + sizeof(char) * 10);
이런 식으로 쓸 수 있다.
- name배열은 sizeof의 크기를 차지하지 않는다.
- malloc을 통해 원하는 길이의 배열의 크기만큼 추가로 할당해 줄 수 있다.
malloc을 통해서 원하는 길이만큼 할당해 줄 수 있는 것은 알겠음.
그러면 malloc을 안하고 그냥 struct를 만드는 것도 가능한가??
- 된다!
되지만, 그냥 만드는 경우 실제 배열은 만들어지지 않기 때문에 메모리 참조 문제를 주의해야 한다. 결국 OOB 취약점 발생 가능.
물론 sizeof(me->name)과 같은 연산도 길이가 정해지지 않은 배열이기 때문에 불가능하다.