flexible array member

dandb3·2023년 5월 23일
0

C언어 문법

목록 보기
2/4
  • 구조체의 멤버 변수를 가변 배열로 설정하고 싶을 때 사용한다.
  • 배열은 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)과 같은 연산도 길이가 정해지지 않은 배열이기 때문에 불가능하다.
profile
공부 내용 저장소

0개의 댓글