함수에서 동적메모리 할당시 free?
글쓴이: 김영호@Facebook / 작성시간: 화, 2017/02/21 - 2:07오후
#include <stdio.h> #include <stdlib.h> char* get_word(); int main(void) { char *p; p=get_word(); printf("동적 메모리에 저장된 단어는 %s입니다.\n",p); free(p); return 0; } char* get_word() { char *s; s=(char*)malloc(sizeof(char)*50); if(s==NULL) { printf("메모리할당오류\n"); exit(1); } printf("단어를 입력하세요: "); gets(s); return s; }
소스코드인데요 제가 동적메모리 할당을 하면 무조건 free를 해줘야한다고 배웠는데요 만약에
아레 get_word() 함수에서 s를 free 해버리면 리턴을 못하잖아요?? 이럴땐 어떻게 하죠??
혹시몰라서 메인함수에서 p=get_word(); 니까 p를 free 해봤는데 이게 맞는지아닌지도 모르겠고,,
궁금하네요.
즉 함수에서 할당한 동적메모리의 free는 어떻게 해야하나?? (해야하나 안해도되나? 해야한다면 어떻게하나?)
이게궁금합니다.
Forums:
함수에서 할당했다고 꼭 함수 내에서 free 를 해줘야 하는 건 아닙니다.
그러면 좋다는 것이겠지요. C code 로 된 오픈소스들만 찾아봐도 꼭 그렇지 않다는 것을 알 수 있을거에요.
free를 해야 하는 것이 일단은 맞습니다. 다만
free를 해야 하는 것이 일단은 맞습니다. 다만 위의 코드에서는 process가 종료 되면서 memory를 반환하기 때문에 문제가 되지는 않습니다. 종료를 하지 않고 계속 get_word가 실행 된다면 leak이 발생하게 됩니다.
함수 안에서 allocate된 point를 반환 한다면, 해당 함수를 호출한 point 변수를 free 시켜 주시면 됩니다. 즉, 위의 코드는 제대로 작성 하셨다는 얘기입니다.
malloc 한 함수와 free 하는 함수가 서로
malloc 한 함수와 free 하는 함수가 서로 다른 게 눈에 거슬린다면 (실제로 거슬리는 것도 사실이고)
호출하는 함수 쪽에서 malloc 을 하고 그 주소를 넘겨주셔도 되고요. (string 관련 함수들이 많이들 그러듯이)
좋은 하루 되세요!
댓글 달기