temp = (char *)malloc(20);
이렇게 해서 temp에 "Hello"란 문자열을 넣었습니다. 그리고 free(temp); 한다음 다시 temp = (char *)malloc(20); 이렇게 해서 다시 재 사용할수 있는지요.
됩니다~ temp는 포인터를 담는공간이고 malloc(20)은 20만큼의 메모리를 확보해서 그 메모리의 핸들(포인터)를 제공해주는겁니다 ^^
가능합니다. ^^ 하지만..
printf("%p\n", temp);
의 결과는 서로 다르겠죠 ^^
평소 이렇게 코딩을 하는데 제방법이 잘못 되었는지 의심스러워 여러 고수님들에게 여쭈워 봤습니다. 확신이 서는군요.. 혹시라도 잘못 된것이 있으면 지적 해 주십시오
^^ 언제까지 일지
당연합니다.
malloc() free()
이 페어로 지속적으로 사용할 수 있습니다. 그러나, 반드시 이 페어는 유지되어야 하며(malloc하면 free한다) 만일 malloc한것을 free하지 않는다면(여러 이유에 의해) 메모리 릭이 발생하게되는것입니다.
------------------ P.S. -------------- 지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
혹시나... 싶어서 하는 말입니다만, free하지 않고 그대로 재사용해도 상관 없습니다.
strcpy(temp, "Hello"); 를 한 뒤에 temp에 다른 것을 넣고 싶다면, free/malloc를 다시 하지 않고 그냥 strcpy(temp, "World"); 해도 상관이 없습니다. 20바이트가 이미 할당 되어 있고, char* temp는 그 공간을 가르키고 있을 뿐이니까요. 그 공간은 프로그램 내에서 free하기 전까지는 맘대로 써도 되는겁니다.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
왜 안됩니까^^
됩니다~
temp는 포인터를 담는공간이고
malloc(20)은 20만큼의 메모리를 확보해서
그 메모리의 핸들(포인터)를 제공해주는겁니다 ^^
가능합니다. ^^하지만..printf("%p\n", temp)
가능합니다. ^^
하지만..
printf("%p\n", temp);
의 결과는 서로 다르겠죠 ^^
감사합니다.
평소 이렇게 코딩을 하는데 제방법이 잘못 되었는지
의심스러워 여러 고수님들에게 여쭈워 봤습니다.
확신이 서는군요..
혹시라도 잘못 된것이 있으면 지적 해 주십시오
^^ 언제까지 일지
당연
당연합니다.
이 페어로 지속적으로 사용할 수 있습니다.
그러나, 반드시 이 페어는 유지되어야 하며(malloc하면 free한다)
만일 malloc한것을 free하지 않는다면(여러 이유에 의해) 메모리 릭이
발생하게되는것입니다.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
혹시나... 싶어서 하는 말입니다만,free하지 않고 그대로 재사용해
혹시나... 싶어서 하는 말입니다만,
free하지 않고 그대로 재사용해도 상관 없습니다.
strcpy(temp, "Hello");
를 한 뒤에 temp에 다른 것을 넣고 싶다면, free/malloc를 다시 하지 않고 그냥
strcpy(temp, "World");
해도 상관이 없습니다.
20바이트가 이미 할당 되어 있고, char* temp는 그 공간을 가르키고 있을 뿐이니까요. 그 공간은 프로그램 내에서 free하기 전까지는 맘대로 써도 되는겁니다.
댓글 달기