malloc, memset 사용시 궁금한 점....
안녕하세요? C 초보입니다. ^^a
아래 test1()과 test2()에서
test1()에서는 malloc을 하고 free를 하니까 메모리가 명시적으로 해제되는데,
test2()에서는 어떻게 되나요?
test2의 경우에 array로 선언하고 memset해서 사용하다가 그냥 리턴해버려도 해당 str의 메모리가 해제되나요?
아니면 이경우에도 명시적으로 메모리 해제를 해줘야하는 것인지요??
-----------------------------------------------------------
void test1() {
char *str;
str = malloc(sizeof(char) * 10);
memset(str, 0, 10);
strncpy(str, "abcdefgh", 4);
//....................
// do something
//....................
free(str);
}
void test2() {
char str[10];
memset(str, 0, 10);
strncpy(str, "abcdefgh", 4);
//....................
// do something
//....................
}
-------------------------------------------------------
그때 그때 달라요라긴 보단. 시스템 마다 전후 사정에 따라 달라요
함수내의 auto 변수로 잡은건 스택에서 할당됩니다.
프로그램이 실행되면서 스택은 줄어 들었다 늘어났다 하기때문에
(정확히는 스택포인터가 이동하는거지만)
어떤 경우에는 저 값이 온전히 살아 있기도 하고 다른 함수에 의해
지워지기도 합니다.
자동(auto)변수이기
자동(auto)변수이기 때문에 스택에 할당되고 함수를 벗어나면 없어집니다. 명시적으로 해제할 수 없으니 그냥 두시면 됩니다.
댓글 달기