c언어 관련해서 질문 있습니다

kimsunboy의 이미지

c언어 코딩하면서 동적메모리를 할당후 반환하는 코드를 짠 후에
컴파일 할때 문제가 없고 실행하는데 문제가 없지만 메모리반환이 잘된지 잘 모르겠더군요...
이에관해서 동적메모리가 잘 반환됬는지 확인하는 방법이 있을까요??

그리고

int *p;
p=(int*)malloc(sizeof(int)*3);
 
p=NULL;

라고 하면서 메모리가 할당된 주소를 NULL로 덮어서 free(p)처럼 할수 있는건가요?

lalupo20의 이미지

위와 같은 경우는 p가 가리키고 있는 메모리 주소를 null로 바꾼거지 메모리 해제가 된게 아닙니다.

자세한것은 아랫분이 답해주실거에요

kimsunboy의 이미지

감사합니다~

익명 사용자의 이미지

malloc()으로 할당받은 메모리의 주소를 p가 저장하고있었습니다.
그런데 p=NULL 한순간 p가 다른값으로 바뀌면서 이전에 받았던 할당받은 메모리 주소를 까먹게 된거죠.

이건 메모리 반환한게 아니라, 힙 메모리 주소를 기억하고있던 p의 내용을 NULL로 바꾼겁니다.
시스템은 아직 malloc()으로 할당받은 힙 메모리를 사용중이라고 인식할겁니다.

p는 그냥 값을 저장하기 위한 공간에 불과합니다. 위 코드에서는 "힙 메모리"를 기억하기 위해 사용했던거구요.

어떻게 말해야할지 몰라서 막 썻는데 도움이 되었으면 좋겠습니다.

요즘은 알아서 해제해주는지 모르겠네요.. 그런데 C에서 NULL이 가능한가요?

kimsunboy의 이미지

넵 c언어에서 NULL가능하더라구여
자세한 답변 감사합니다

김정균의 이미지

위에 설명에 추가를 하지면, 이런 경우가 memory leak 이 됩니다.
memory 해제할 주소를 읽어 버리기 때문에 계속 메모리 사용량이 증가를 하게 되는 거죠. 단발성 실행이라면 모르겠지만, daemon 이나 계속 실행을 시켜 놓아야 하는 프로그램에서는 memory leak 이 발생하여 시간이 경과하면서 memory 고갈이 발생하게 됩니다.

Stephen Kyoungwon Kim@Google의 이미지

서버가 어떤 스냅샷에서 복구된 것 같은데, 그 스냅샷 이후의 제 답변이 날아갔네요.

그때도 적었지만, 툴을 써서 memory leak을 확인할 수 있습니다. 꽤 여러 가지 있을 텐데 valgrind 같은 게 있고요.

그 다음으로는 malloc, calloc, free 같은 메모리 매니지먼트 관련 함수를 호출하면, 프로그래머가 구현해 놓은, 이를테면, my_malloc, my_calloc, my_free 등을 호출하게끔 하는 트릭이 있습니다. 그 안에서 실제 malloc, calloc, free 등을 부르면서 메모리 할당/해제 여부를 추적하는 방식이 있습니다.

그외에도 아마 garbage collector 구현이 있을 것 같은데, 그것까진 저도 잘 모르겠습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.