inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

홍정모의 따라하며 배우는 C언어

14.11 신축성있는 배열 멤버

flexible array member 질문 드립니다.

222

m1n_q

작성한 질문수 24

0

struct flex {
		size_t count;		// 4 bytes
		double average;	// 8 bytes
		double values[];	// Flexible array member 

	};

const size_t n = 3;

int main() {

	struct flex* pf = (struct flex*)malloc(sizeof(struct flex) + n * sizeof(double));
	if (pf == NULL) exit(1);
	

       struct flex* pf2 = pf +1;


        printf("%lld\n",  (long long)(pf));
	printf("%lld\n",  (long long)(pf2));

	pf->count = n;
	pf->values[0] = 1.1;
	pf->values[1] = 2.1;
	pf->values[2] = 3.1;


        printf("%lld\n",  (long long)(pf));
	printf("%lld\n",  (long long)(pf2));
	printf("\n");
	printf("%lld\n",  (long long)(&pf->values[1]));
	printf("%lld\n",  (long long)(&pf2->average));
}

flexible array member를 가진 pf의 경우,
sizeof 연산자는 pf->value를 0의 크기로 나타내는데,

그 array에 값들이 들어갈 경우, 실제 메모리를 더 차지하게 되는데요!

이런 상황에서 포인터 연산으로 pf2를 만들어 줬을때 ,

제가 첨부한 코드처럼
위의 flexible array 멤버가 pf2 의 영역을 침범하는 경우가 발생하지 않나요?

저는 임의로 상황을 만들어서 억지스럽긴 하지만
struct flex 를 원소로 갖는 배열이 있다고 하면,
배열의 인덱싱은 sizeof(struct flex) 단위로 움직일텐데 
그럼 이상한 상황이 연출되지 않으련지,,, 궁금하여 여쭙습니다!

c

답변 1

0

안소

그런 상황이 발생할 수도 있을 것 같아요. C는 개발자가 메모리를 자유자재로 다룰 수 있는 언어이니만큼 질문자님께서 우려하시는 그런 상황이 충분히 발생할 수 있을 것 같기도 합니다. 그런 상황이 연출되지 않게끔 개발자가 고려하고 조심해서 사용해야할 부분인 것 같아요.

완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.

1

47

3

main 함수에서 왜 int만 선언이 되는걸까요

1

52

2

8비트 2진수 변환시 왜 1을 더해야하나요?

1

53

2

혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?

1

46

1

프로토타입과 함수간의 인자 불일치

1

72

2

12.12 헤더 관련 질문

1

59

2

Visual Studio Community 2026 사용 문의

1

134

2

Q. 15:30, 부호가 있는 8비트 정수 질문

1

59

2

getchar(), putchar()

1

92

3

강의자리ㅛ

1

78

2

비주얼스튜디오코드로 공부해도 상관없나요?

1

112

2

소스파일안에 여러 파일

1

74

2

F5와 F7의 차이

1

75

2

c = TWO * (a+b); 에서 a와 b는?

1

58

2

; 세미콜론을 붙이는 기준에 문의

1

68

1

Step over 기능 문의

1

52

2

2.6 강의 따옴표 출력 규칙 문의

1

74

2

int main 함수 관련 오류 문의

1

67

2

13.4 words[0]

0

60

2

11.7 함수를 구현해 봤습니다.

1

62

2

11.6 직접 strcmp와 strncmp를 구현해 보았습니다.

1

64

2

11.6 my_strcat과 my_strncat을 구현해봤습니다.

1

53

2

11.6 fit_str함수를 구현해 봤습니다.

1

53

2

11.5 코드 구현

1

67

2