i1004gy   2년 전

struct Queue* queue = (struct Queue*) malloc(sizeof(struct Queue));

이 부분이 이해가 안가는데 queue는 구조체 Queue의 포인터 변수일 뿐인데 왜 크기를 할당해야 하는 것이죠?

chogahui05   2년 전

구조체 크기보다 작게 할당하면 어떻게 될까요?

예를 들어서 내가 할당해야 하는 원소가 (int형 * 3)만큼의 크기였다고 해 봅시다.

그런데 (int형 * 2)만큼 할당했어요.

그러한 경우, 물론 운이 좋게도, 할당한 공간 내에서 메모리에 쓸 수도 있겠지만.

그렇지 않은 경우도 있을 겁니다. 예를 들자면 아래 코드와 같이 생성한 경우인데..

이렇게 했을 때

mo -> gahui[2] = 3;

이 코드를 넣으면 어떻게 될까요?

chogahui05   2년 전

실제로 아래 코드를 wand에서 돌려보면

seg fault라는 걸 보실 수 있을 거에요.



queue는 포인터 변수입니다. Queue형 자료를 가리키는 포인터입니다.

malloc 같은 경우, heap이라는 공간에, size 만큼의 공간을 할당해 주는 함수입니다. 할당한 위치를 리턴해 주는데

리턴 값이 void형 포인터입니다.

그래서 malloc을 쓸 때 앞에 (moo *)라던지 (queue *)와 같은 casting을 합니다.

그림으로 그려보면

queue 

[0x30번지]

[0x30번지]

heap에 실제 queue 자료에 대한 정보가 들어가 있음.

요래 될 거고요.. 포인터 변수와, 실제 데이터를 혼동하시는 거 같아요...

댓글을 작성하려면 로그인해야 합니다.