구조체 크기보다 작게 할당하면 어떻게 될까요?
예를 들어서 내가 할당해야 하는 원소가 (int형 * 3)만큼의 크기였다고 해 봅시다.
그런데 (int형 * 2)만큼 할당했어요.
그러한 경우, 물론 운이 좋게도, 할당한 공간 내에서 메모리에 쓸 수도 있겠지만.
그렇지 않은 경우도 있을 겁니다. 예를 들자면 아래 코드와 같이 생성한 경우인데..
이렇게 했을 때
mo -> gahui[2] = 3;
이 코드를 넣으면 어떻게 될까요?
구조체 크기보다 작게 할당하면 어떻게 될까요?
예를 들어서 내가 할당해야 하는 원소가 (int형 * 3)만큼의 크기였다고 해 봅시다.
그런데 (int형 * 2)만큼 할당했어요.
그러한 경우, 물론 운이 좋게도, 할당한 공간 내에서 메모리에 쓸 수도 있겠지만.
그렇지 않은 경우도 있을 겁니다. 예를 들자면 아래 코드와 같이 생성한 경우인데..
이렇게 했을 때
mo -> gahui[2] = 3;
이 코드를 넣으면 어떻게 될까요?
실제로 아래 코드를 wand에서 돌려보면
seg fault라는 걸 보실 수 있을 거에요.
queue는 포인터 변수입니다. Queue형 자료를 가리키는 포인터입니다.
malloc 같은 경우, heap이라는 공간에, size 만큼의 공간을 할당해 주는 함수입니다. 할당한 위치를 리턴해 주는데
리턴 값이 void형 포인터입니다.
그래서 malloc을 쓸 때 앞에 (moo *)라던지 (queue *)와 같은 casting을 합니다.
그림으로 그려보면
queue
[0x30번지]
[0x30번지]
heap에 실제 queue 자료에 대한 정보가 들어가 있음.
요래 될 거고요.. 포인터 변수와, 실제 데이터를 혼동하시는 거 같아요...
댓글을 작성하려면 로그인해야 합니다.
i1004gy 5년 전
struct Queue* queue = (struct Queue*) malloc(sizeof(struct Queue));
이 부분이 이해가 안가는데 queue는 구조체 Queue의 포인터 변수일 뿐인데 왜 크기를 할당해야 하는 것이죠?