-> 홈으로
ë�™ì � í• ë‹¹ ¶
char *d;
d = (char*)malloc(sizeof(char)*100);
여기서 malloc(sizeof(char)*100);
ì�€ 메모리 ìƒ�ì�˜ ì–´ëŠ� ê³³ì—� (sizeof(char)*100)byteë§Œí�¼ì�˜ 공간ì�„ í• ë‹¹í•˜ê³ ê·¸ 주소를 반환한다.
ê·¸ë¦¬ê³ d는 char*형태ì�´ê¸° 때문ì—� Castingì�„ í•´ 주어서 (char*)malloc(sizeof(char)*100); 와 ê°™ì�€ 형태가 ë�˜ì–´ì•¼ 한다.
ì�´ 것ì�€ char d ï¼»100]와 ê°™ì�€ 변수 ì„ ì–¸ë²•ì�´ë‹¤.
ì�´ 것ì�€ char d ï¼»100]와 ê°™ì�€ 변수 ì„ ì–¸ë²•ì�´ë‹¤.
char *d;
d = (char*)malloc(sizeof(char)*100);
와 ê°™ì�´ ì„ ì–¸ì�„ í–ˆë�”ë�¼ë�„ dï¼»10]와 ê°™ì�€ ë°°ì—´ì � ì ‘ê·¼ë�„ 가능하다.
ex)ì�´ê²ƒìœ¼ë¡œ 2ì°¨ì›� ë°°ì—´ì�„ ë§Œë“¤ë ¤ë©´?
char **arrray, *d;
d = (char*)malloc(sizeof(char) * 100);
arrray = (char**)malloc(sizeof(d) * 100);
ì�´ë ‡ê²Œ 하면 char array ï¼»100][100]와 ê°™ì�€ 형태가 ë�œë‹¤.
ì�´ê±¸ 왜 ì“°ëƒ�? ¶
int temp;
char *d;
scanf("dì�˜ ë°°ì—´ í�¬ê¸°ë¥¼ ìž…ë ¥í•´ì£¼ì„¸ìš”.\n%d", temp);
d = (char*)malloc(sizeof(char) * temp);
와 ê°™ì�€ 형태를 통해서 ìž�ì‹ ì�´ ì›�하는 í�¬ê¸°ë¥¼ ë°°ì—´ì—� í• ë‹¹ì‹œí‚¬ 수 있다.
Cì—�서는 변수 ì„ ì–¸ì�„ 맨 위ì—� 해야 하므로 int dï¼»temp]와 ê°™ì�€ 형태로 ì„ ì–¸í• ìˆ˜ 없다.(아무ë�°ì„œë‚˜ ì„ ì–¸ì�„ í• ìˆ˜ 있는 C++ì—�서ë�„ ì�´ëŸ° 형태는 불가능하다.)
Cì—�서는 변수 ì„ ì–¸ì�„ 맨 위ì—� 해야 하므로 int dï¼»temp]와 ê°™ì�€ 형태로 ì„ ì–¸í• ìˆ˜ 없다.(아무ë�°ì„œë‚˜ ì„ ì–¸ì�„ í• ìˆ˜ 있는 C++ì—�서ë�„ ì�´ëŸ° 형태는 불가능하다.)
ê²°ë¡ : 메모리ì�˜ 최ì �화를 위해서.
FREE ì�˜ 사용법 ¶
free(d); 를 �용해서 지금 실행중� 프로그램� 종��어있는 sizeof(char) * temp만�� 메모리를 OS� 다시 반환시킨다.
ì�´ free는 가장 하위 í�¬ì�¸í„°ì—�ë§Œ 사용ì�´ 가능하다. ë”°ë�¼ì„œ array를 모ë‘� freeì‹œí‚¤ë ¤ë©´ for문ì�„ ë�Œë ¤ì„œ free(arrayï¼»iï¼½)와 ê°™ì�´ 모ë‘� ì—†ì• ì¤€ 후ì—� free(array);를 해야 한다.
하지만 간단한 프로그램ì—�서는 ì�´ë ‡ê²Œ í•´ 줄 필요가 없다. 프로그램ì�„ 종료시키면 알아서 OSê°€ ê°€ì ¸ê°€ê¸° 때문ì—�.
나중ì—� 거대 프로ì �트(오랜시간ë�™ì•ˆ 켜 놓아야 하는 게임 ê°™ì�€ 경우)ì—�서는 메모리 반환ì�„ 하지 않으면 컴퓨터가 ëŠ�ë ¤ì§€ê³ ê°€ìš©ë©”ëª¨ë¦¬ê°€ ì—†ì–´ì ¸ì„œ 메모리를 ìš”ì²í–ˆì�„ 때 메모리가 부족해 프로그램ì�„ 다시 ê»�다 켜야 하는 ìƒ�황ì�´ ë°œìƒ�í• ìˆ˜ 있다.









