메모리 동적할당 - C언어 malloc함수, free함수, memory leak(메모리 누수), 메모리 heap영역

Поделиться
HTML-код
  • Опубликовано: 21 сен 2024
  • ➡️ 소스코드 : cafe.naver.com...
    runtime시 메모리를 할당한 후 해제 하는 방법에 대해 배웁니다. 메모리 동적 할당이 필요한 이유에 대해 알아봅니다. malloc으로 할당 된 메모리는 메모리 heap영역에 잡힌다. 이 영역은 free로 반드시 해제 되야 한다. free로 해제 하지 않을 시 메모리 누수(memory leak)이 발생된다.
    김수현 강사 cafe.naver.com/honeyc
    구독!!! 좋아요!!! 알림 설정!!! 부탁 드려요!!!
    #김수현강사 #c언어 #혀니C #혀니씨 #자료구조 #알고리즘 #C++ #코딩인터뷰 #코딩테스트 #프로그래밍 #IT학원 #C언어학원 #IT취업 #포인터 #정보처리기사 #정보처리산업기사 #정보 #공시 #전산직 #공무원 #군무원 # 계리직 #임용

Комментарии • 81

  • @something6193
    @something6193 Год назад +4

    3:00 에서 말씀하신 코드는 c99부터 가변길이배열(VLA) 기능이 추가되어 가능한 문법인데 틀린 문법이라고 말하기는 어렵지 않나요?

    • @withhoneyc
      @withhoneyc  Год назад +2

      네:) C에서 가변 길이 배열(VLA:Variable Length Array)을 사용할 수 있습니다. VLA는 C99 표준에 도입되었으며 컴파일 타임이 아닌 런타임에 크기가 결정되는 배열 생성을 허용합니다. 하지만, 런 타임 시 메모리가 할당 되기 때문에 동적 할당 방식을 이해하는 것은 맞다고 생각합니다.
      또한, 배열 크기를 자주 조정해야 하는 경우 VLA가 비효율적 입니다. 특히, VLA는 크기가 매우 크면 잠재적으로 많은 메모리를 소비할 수 있다는 문제도 있습니다. 필요한 메모리 양이 사용 가능한 스택 공간을 초과하면 스택 오버플로 오류가 발생할 수 있습니다. 이 문제를 방지하려면 malloc을 사용하는 것이 좋습니다.

    • @withhoneyc
      @withhoneyc  Год назад +2

      Visual Studio는 C에서 VLA(가변 길이 배열)를 지원하지 않습니다. 이는 VLA가 Visual Studio에서 부분적으로만 지원하는 C99 표준에 도입되었기 때문입니다. 대신 Visual Studio에서는 `malloc()` 및 `free()`와 함께 동적 메모리 할당을 사용하여 가변 크기의 배열을 만들 것을 권장합니다.
      - Clang 및 GCC: VLA를 확장으로 지원 합니다.
      - Microsoft Visual Studio: VLA를 지원하지 않습니다.

    • @withhoneyc
      @withhoneyc  Год назад +1

      말씀하신 것처럼 틀린 문법이라고 한 건 맞지 않는거 같습니다.😊

    • @something6193
      @something6193 Год назад

      @@withhoneyc 와우.. 답변 감사합니다. 항상 영상 잘 보고 있습니다. 어찌나 설명을 똑 부러지게 잘하시는지 대단하십니다. 감사합니다!

    • @withhoneyc
      @withhoneyc  Год назад +4

      저도 소중한 피드백 너무 감사합니다🙏 질문하신 내용을 다른분등에게도 공유하고자 고정 댓글로 올려놨습니다😊

  • @NANLiche
    @NANLiche 9 месяцев назад +3

    그냥 모든 강의 통틀어서 제일 이해잘됨

    • @withhoneyc
      @withhoneyc  9 месяцев назад

      넘넘 감사합니다:) 더욱 좋은 강의로 보답하겠습니다.

  • @gloryfarm
    @gloryfarm 7 месяцев назад +3

    아래 댓글처럼 정말 이해가 잘되는 최고의 강의! 정말 감사드려요.

    • @withhoneyc
      @withhoneyc  7 месяцев назад

      이해가 되셨다니 정말 기쁘네요👍 감사합니다:)

  • @antoniohong2948
    @antoniohong2948 Год назад +3

    C언어 처음 공부하는 임문자들한테 추천하고싶은 강의영상입니다. 선생님 정말 최고에요.

    • @withhoneyc
      @withhoneyc  Год назад

      으흐흫흐 너무 감사드립니다🙏

  • @dizzy2k880
    @dizzy2k880 Месяц назад +1

    쌤. 배웠던거 복습하면서, 수업시간에서 다루지 않았던 부분들을 공부하려고 유튭으로 왔어요. ㅋㅋㅋ

    • @withhoneyc
      @withhoneyc  Месяц назад

      ㅎㅎㅎㅎㅎㅎ 예쁜 션~❤️

  • @김도영-o1e
    @김도영-o1e 8 месяцев назад +2

    내 인생 최고의 c언어 강의.. 감사합니다😢

    • @withhoneyc
      @withhoneyc  8 месяцев назад

      너무 너무 감사합니다🙏

  • @아맞다우산
    @아맞다우산 9 месяцев назад

    선생님 자료구조 공부 해야돼서 어쩌다 보게 되었는데 c언어 잘 모르는데도 설명을 잘 해주셔서 머리에 너무 잘 들어와요 감사합니다.
    저는 자바 개발자인데요 자바에서는 가비지컬렉터가 메모리 관리를 해줘서 메모리에 대해 크게 신경 안 쓰고 코딩했었는데 c에서는 개발자가 직접 메모리 관리를 해줘야 하니깐 두 언어의 차이점도 잘 이해가 되네요. 오늘부터 자료구조랑 알고리즘 강의 감사히 잘 보겠습니다!!

    • @withhoneyc
      @withhoneyc  9 месяцев назад

      넹넹 감사함니다😊 개발자여서 금방 습득 하실 거 같아요!! 홧팅 입니다!!!

  • @cjy8972
    @cjy8972 2 месяца назад +1

    탬플릿 영상 찾아보다가 여기까지 왔습니다. 확실히 이해가 잘되네요!

    • @withhoneyc
      @withhoneyc  2 месяца назад

      감사합니다! 자주 찾아와주세용~🙏

  • @정비-k5h
    @정비-k5h 11 месяцев назад +2

    와 제가 지금까지 들었던 강의 중에서 제일 이해가 잘돼요 ㅜㅜ

    • @withhoneyc
      @withhoneyc  11 месяцев назад

      잘 들어 주셔서 감사합니다😊

  • @이상현-s3b
    @이상현-s3b 11 месяцев назад +1

    포인터에서 한 번 막히고 강의 보고 이해하고
    동적 할당에서 또 막혀서 봤는데 정말 잘 가르치시네요
    감사합니다😊

    • @withhoneyc
      @withhoneyc  11 месяцев назад

      이해가 되신다니 제가 더 기쁘네용😊
      힘이 되는 댓글 감사합니다:)

  • @음머-z6s
    @음머-z6s Год назад +2

    정처기 공부하다가 malloc 찾아봤는데 잘 이해하고 갑니다 ❤❤❤

    • @withhoneyc
      @withhoneyc  Год назад

      이해가 되셨다니 기쁘네용😍

  • @damangetit
    @damangetit Год назад +3

    학교 수업 듣고 꼭 복습할 때 주강의로 삼아서 학습해요. 감사합니다!

    • @withhoneyc
      @withhoneyc  Год назад

      어멋!!! 넘 감사해용🙏 자주 찾아와 주세용

  • @haein04
    @haein04 6 месяцев назад +1

    와... 비전공자도 너무 쉽게 이해가 되네요... 감사합니다

    • @withhoneyc
      @withhoneyc  6 месяцев назад

      저도 너무너무 감사합니다😊

  • @clay5823
    @clay5823 Год назад +1

    너모나 이해가 잘되었습니다! 감사합니다 구독할께요~ //보조개가 너무 이쁘십니다ㅋ

    • @withhoneyc
      @withhoneyc  11 месяцев назад

      감사합니다🙏 자주 찾아와 주세요!!!

  • @butterfly_dream
    @butterfly_dream 3 месяца назад +1

    기말시험 준비하는 학부생입니다 감사합니다 감사합니다 ㅠㅠㅠ

    • @withhoneyc
      @withhoneyc  3 месяца назад

      저도 넘넘 김사합니다~:)
      기말 잘보세용~홧팅!!!

  • @dukyoon
    @dukyoon 5 месяцев назад +1

    와.. 대박.. 속이 뻥~~

    • @withhoneyc
      @withhoneyc  5 месяцев назад

      ㅎㅎㅎㅎ 감사합니당😊

  • @yejangeee
    @yejangeee Месяц назад +1

    바로 구독박고갑니다

    • @withhoneyc
      @withhoneyc  Месяц назад

      아주 감사합니다!👍

  • @stockuncle
    @stockuncle 2 месяца назад +1

    선생님이 예쁘면 학생 점수가 강제로 올라가는 이유를 증명

    • @withhoneyc
      @withhoneyc  2 месяца назад

      ㅋㅋㅋㅋㅋㅋ 성적이 안오르면 제 탓인거죠???

  • @유희영-h5i
    @유희영-h5i Год назад +2

    허ㅓㄹ,.,. 언니 너무 고마워요 사랑해요

  • @jaekunyoo8509
    @jaekunyoo8509 11 месяцев назад +1

    안녕하세요. 감사히 잘 봤어요.
    2023년 10월 11일 수 21시31분 태평양 시간

  • @user-fr3fy7be6u
    @user-fr3fy7be6u 8 месяцев назад +1

    이해가 정말 잘 됩니다!! 감사해요

    • @withhoneyc
      @withhoneyc  8 месяцев назад

      자도 감사해용😊

  • @hyun9040
    @hyun9040 Год назад +1

    선생님 이해 잘되게 설명 해주셔서 감사합니다!^^

    • @withhoneyc
      @withhoneyc  Год назад +1

      도움이 되신다니 정말 기뻐용😊

  • @킴키-o1y
    @킴키-o1y 8 месяцев назад +1

    감사합니다!^^

    • @킴키-o1y
      @킴키-o1y 7 месяцев назад

      int n ;
      printf ( "학생수 입력 : ") ;
      scanf ( " %d", & n ) ;
      int score [ n ] ; // error 정적할당. stack영역에 저장됨. compile시 메모리 크기가 결정되어있어야 하므로 사용불가.
      int * score ;
      score = ( int * ) malloc ( n * sizeof ( int)) ; // 동적할당. heap영역에 메모리할당됨. 실행중(runtime) 메모리 크기가 결정되면 됨.
      // score는 stack영역에 저장되는 지역변수. heap영역에 malloc된 배열을 가리키는 포인터변수. 8byte

  • @user-iliillllIllill
    @user-iliillllIllill Год назад

    재귀함수 설명 듣고 넘 좋아서 구독햇습니당 ㅋㅋㅋㅋ 혹시 C언어 강의는 완결이 된건가요? 비전공자인데 고언어가 재밌어서 c도 같이 공부해보려고합니다..!

    • @withhoneyc
      @withhoneyc  Год назад

      감사합니다🙏
      9월 둘째 주 부터 C언어 기초 강좌를 순서대로 업로드 할 예정입니다.

  • @오잉-v6v
    @오잉-v6v Год назад +1

    감사합니당 이해가 잘돼요!! 출처를 남기고 블로그에 공부한걸 기록해도 괜찮을까요!??

  • @Welcome2LorreryWorld
    @Welcome2LorreryWorld 5 месяцев назад +1

    맞습니다.. 혀니님께서 제대로 잘 알려주고 계시네요.. '멀록'이 아니라 '엠얼록' 이라고 하는 것이 옳습니다.. 그렇지 않으면, 'calloc'은 '콜록'이 되버리고, 'realloc'은 '릴록'이 되어 버립니다.. 그리고 char 자료형도 혀니님처럼 '캐릭터'라고 해야 합니다.. 간혹 '챠' 라고 하시는 분이 계신데 잘못된 발음입니다.. 실제로 미국에서는 줄여서 발음 할때 '카'라고 합니다.. '캐릭터' 를 줄여서 발음할 때 '챠' 라고 하는 것은 얼토당토 하지 않는 발음입니다.. 구조체도 '스트럭트' 라고 하지 않고 혀니님이 '스트럭쳐' 라고 발음해주시는 것이 제대로 가르쳐 주고 계시는 겁니다..

    • @withhoneyc
      @withhoneyc  5 месяцев назад

      영어에 트라우마 있는데 ㅎㅎㅎㅎ
      이렇게 칭찬해 주셔서 감사합니다😄

  • @jhpark8624
    @jhpark8624 Год назад

    선생님 강의 너무 잘 듣고 있습니다 😊
    예전부터 궁금했는데 램이라는 하드웨어 자체가 스택영역, 힙영역, 데이터영역으로 나누어져 있는 건가용??

    • @withhoneyc
      @withhoneyc  Год назад

      네:) 크게 그렇게 나눠졌다고 이해 하시면 될 거 같아요.

  • @torressfernando5003
    @torressfernando5003 11 месяцев назад +1

    이차원배열 동적할당도 보고싶어요

    • @withhoneyc
      @withhoneyc  11 месяцев назад +1

      넵! 준비할께요:)

  • @dongsuknam3238
    @dongsuknam3238 Год назад

    강사님~
    오랜만에 글 올립니다.
    궁금한것 질문해도 되죠?
    다름이아니라 c언어 에서
    2차원 배열을 동적할당하고
    해제할때,
    할당시에는 세로줄인 행을 할당하고 난다음 가로줄인 열배열을 할당
    하는데, 동적해제시에는 반대로
    가로줄인 열배열을 먼저해제하고,
    세로줄인 행배열을 해제한다는
    의미가 잘 이해가 안되는데,
    자세히 설명 부탁드려도 될까요?

    • @withhoneyc
      @withhoneyc  Год назад

      행배열을 먼저 제거하는 순간 동적 할당 된 열배열의 주소는 다 사라져요~열 배열의 주소가 포인터 배열에 저장되어 있기 때문입니다:)

    • @dongsuknam3238
      @dongsuknam3238 Год назад

      @@withhoneyc 혹시 이 부분에 대해 동영상 설명된 부분이 있을까요?

    • @withhoneyc
      @withhoneyc  Год назад

      ruclips.net/video/mGkHJYEoZsg/видео.html
      그래프 구현하면서 2차원 배열 동적 할당하긴 했는데…그래프 부분이라 좀 어려울 수도 있어요:)

  • @woosukbyun2455
    @woosukbyun2455 Год назад

    강의에서 메모리 공간을 RAM이라고 표현하셨는데 RAM이 아니라 virtual memory(가상 메모리)로 표현하는게 맞지 않나요?

    • @withhoneyc
      @withhoneyc  Год назад

      네:) 가상 메모리 맞습니다.
      가상 메모리가 물리 메모리 주소와 매핑되기 때문에 보통 램이라고 많이 얘기하긴 해요^^

    • @woosukbyun2455
      @woosukbyun2455 Год назад

      @@withhoneyc 아 그래요? 제가 알기론 보통 물리 메모리를 램이라고 부르는지 알고 있었는데..
      답변 감사합니당!

    • @woosukbyun2455
      @woosukbyun2455 Год назад

      @@withhoneyc 네 답변 감사합니다.

    • @withhoneyc
      @withhoneyc  Год назад

      맞아요!!! 물리메모리를 램이라해요:)

  • @alphago410
    @alphago410 2 месяца назад

    free() 호출 안하면 실행이 종료돼도 해제되지 않는다는 의미인가요?

    • @withhoneyc
      @withhoneyc  2 месяца назад

      네:) 시스템 재부팅 시 해제 됩니다.

    • @alphago410
      @alphago410 2 месяца назад

      @@withhoneyc 그 말은 OS쪽에도 문제가 있다는 의미군요.
      malloc() 호출은 OS에 대한 요청이고 역시 OS가 응답해 처리하는 부분이니까요

  • @아아-b6c8f
    @아아-b6c8f Год назад

    파일입출력도 다뤄주실수 있나요

  • @happistence
    @happistence Год назад

    C/C++ 막 입문해서 공부 중인데 개념을 설명하시는 내용이 너무 좋아요! 영상을 보고 질문이 하나 생겼습니다.
    int* score = (int*)malloc(n*sizeof(int)) 에서 score의 자료형이 정수형 포인터라고 선언 됐으므로, r-value로 메모리의 시작 주소값만 받으면 되니까 malloc 앞에 자료형을 꼭 적어줘야 할 필요는 없는 것 같은데 맞나요?
    확인해보니 gcc 컴파일러로는 int* score = malloc(n*sizeof(int)) 가 컴파일이 되고, g++에서는 int* score = malloc(n*sizeof(int))가 컴파일이 안되네요 😂😂

    • @withhoneyc
      @withhoneyc  Год назад

      넹넹!!! 묵시적으로 형변환 되기 때문에 생략 가능해요!!! g++는 참 엄격해서 공부하기 좋네용😊

  • @withhoneyc
    @withhoneyc  Год назад

    소스코드 : cafe.naver.com/honeyc/46312

  • @owatapiano
    @owatapiano 2 месяца назад

    타이틀에 momory 오타 있어요~

    • @withhoneyc
      @withhoneyc  2 месяца назад

      앗!!! 감사해요!!!ㅎㅎ
      올린지 오래됐는데 ㅠㅠㅠ
      이제야 알았네요~😊

  • @park712
    @park712 Год назад +1

    MIT공대 댓글학과 출신입니다. 결혼해 주세요

  • @justinjeong813
    @justinjeong813 5 месяцев назад

    어려운거 같은데

    • @withhoneyc
      @withhoneyc  5 месяцев назад

      ㅠ 많이 어려운 부분이라