네:) C에서 가변 길이 배열(VLA:Variable Length Array)을 사용할 수 있습니다. VLA는 C99 표준에 도입되었으며 컴파일 타임이 아닌 런타임에 크기가 결정되는 배열 생성을 허용합니다. 하지만, 런 타임 시 메모리가 할당 되기 때문에 동적 할당 방식을 이해하는 것은 맞다고 생각합니다. 또한, 배열 크기를 자주 조정해야 하는 경우 VLA가 비효율적 입니다. 특히, VLA는 크기가 매우 크면 잠재적으로 많은 메모리를 소비할 수 있다는 문제도 있습니다. 필요한 메모리 양이 사용 가능한 스택 공간을 초과하면 스택 오버플로 오류가 발생할 수 있습니다. 이 문제를 방지하려면 malloc을 사용하는 것이 좋습니다.
Visual Studio는 C에서 VLA(가변 길이 배열)를 지원하지 않습니다. 이는 VLA가 Visual Studio에서 부분적으로만 지원하는 C99 표준에 도입되었기 때문입니다. 대신 Visual Studio에서는 `malloc()` 및 `free()`와 함께 동적 메모리 할당을 사용하여 가변 크기의 배열을 만들 것을 권장합니다. - Clang 및 GCC: VLA를 확장으로 지원 합니다. - Microsoft Visual Studio: VLA를 지원하지 않습니다.
선생님 자료구조 공부 해야돼서 어쩌다 보게 되었는데 c언어 잘 모르는데도 설명을 잘 해주셔서 머리에 너무 잘 들어와요 감사합니다. 저는 자바 개발자인데요 자바에서는 가비지컬렉터가 메모리 관리를 해줘서 메모리에 대해 크게 신경 안 쓰고 코딩했었는데 c에서는 개발자가 직접 메모리 관리를 해줘야 하니깐 두 언어의 차이점도 잘 이해가 되네요. 오늘부터 자료구조랑 알고리즘 강의 감사히 잘 보겠습니다!!
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
선생님. 이런 좋은 강의 올려주셔서 감사합니다. 학교 자료구조 수업이 너무 맘에 안 들어서 일반적으로 '자료구조론'이라고 흔히들 얘기하는 범위에 해당하는 부분(그 과정에서 필요한 알고리즘 내용도 들어가도 괜찮음)을 전체적으로 공부하려고 하는데, 그런 목적으로 선생님께서 '자료구조&알고리즘'이라고 묶어놓은 플레이리스트를 싹 다 보면 될까요?
강사님~ 오랜만에 글 올립니다. 궁금한것 질문해도 되죠? 다름이아니라 c언어 에서 2차원 배열을 동적할당하고 해제할때, 할당시에는 세로줄인 행을 할당하고 난다음 가로줄인 열배열을 할당 하는데, 동적해제시에는 반대로 가로줄인 열배열을 먼저해제하고, 세로줄인 행배열을 해제한다는 의미가 잘 이해가 안되는데, 자세히 설명 부탁드려도 될까요?
혹시 Visual studio가 아닌 다른 컴파일러를 사용중이신가요? C에서 가변 길이 배열(VLA:Variable Length Array)을 사용할 수 있습니다. VLA는 C99 표준에 도입되었으며 컴파일 타임이 아닌 런타임에 크기가 결정되는 배열 생성을 허용합니다. 하지만, 런 타임 시 메모리가 할당 되기 때문에 동적 할당 방식을 이해하는 것은 맞다고 생각합니다. 또한, 배열 크기를 자주 조정해야 하는 경우 VLA가 비효율적 입니다. 특히, VLA는 크기가 매우 크면 잠재적으로 많은 메모리를 소비할 수 있다는 문제도 있습니다. 필요한 메모리 양이 사용 가능한 스택 공간을 초과하면 스택 오버플로 오류가 발생할 수 있습니다. 이 문제를 방지하려면 malloc을 사용하는 것이 좋습니다. Visual Studio는 C에서 VLA(가변 길이 배열)를 지원하지 않습니다. 이는 VLA가 Visual Studio에서 부분적으로만 지원하는 C99 표준에 도입되었기 때문입니다. 대신 Visual Studio에서는 `malloc()` 및 `free()`와 함께 동적 메모리 할당을 사용하여 가변 크기의 배열을 만들 것을 권장합니다. - Clang 및 GCC: VLA를 확장으로 지원 합니다. - Microsoft Visual Studio: VLA를 지원하지 않습니다.
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))가 컴파일이 안되네요 😂😂
3:00 에서 말씀하신 코드는 c99부터 가변길이배열(VLA) 기능이 추가되어 가능한 문법인데 틀린 문법이라고 말하기는 어렵지 않나요?
네:) C에서 가변 길이 배열(VLA:Variable Length Array)을 사용할 수 있습니다. VLA는 C99 표준에 도입되었으며 컴파일 타임이 아닌 런타임에 크기가 결정되는 배열 생성을 허용합니다. 하지만, 런 타임 시 메모리가 할당 되기 때문에 동적 할당 방식을 이해하는 것은 맞다고 생각합니다.
또한, 배열 크기를 자주 조정해야 하는 경우 VLA가 비효율적 입니다. 특히, VLA는 크기가 매우 크면 잠재적으로 많은 메모리를 소비할 수 있다는 문제도 있습니다. 필요한 메모리 양이 사용 가능한 스택 공간을 초과하면 스택 오버플로 오류가 발생할 수 있습니다. 이 문제를 방지하려면 malloc을 사용하는 것이 좋습니다.
Visual Studio는 C에서 VLA(가변 길이 배열)를 지원하지 않습니다. 이는 VLA가 Visual Studio에서 부분적으로만 지원하는 C99 표준에 도입되었기 때문입니다. 대신 Visual Studio에서는 `malloc()` 및 `free()`와 함께 동적 메모리 할당을 사용하여 가변 크기의 배열을 만들 것을 권장합니다.
- Clang 및 GCC: VLA를 확장으로 지원 합니다.
- Microsoft Visual Studio: VLA를 지원하지 않습니다.
말씀하신 것처럼 틀린 문법이라고 한 건 맞지 않는거 같습니다.😊
@@withhoneyc 와우.. 답변 감사합니다. 항상 영상 잘 보고 있습니다. 어찌나 설명을 똑 부러지게 잘하시는지 대단하십니다. 감사합니다!
저도 소중한 피드백 너무 감사합니다🙏 질문하신 내용을 다른분등에게도 공유하고자 고정 댓글로 올려놨습니다😊
그냥 모든 강의 통틀어서 제일 이해잘됨
넘넘 감사합니다:) 더욱 좋은 강의로 보답하겠습니다.
아래 댓글처럼 정말 이해가 잘되는 최고의 강의! 정말 감사드려요.
이해가 되셨다니 정말 기쁘네요👍 감사합니다:)
내 인생 최고의 c언어 강의.. 감사합니다😢
너무 너무 감사합니다🙏
C언어 처음 공부하는 임문자들한테 추천하고싶은 강의영상입니다. 선생님 정말 최고에요.
으흐흫흐 너무 감사드립니다🙏
와 제가 지금까지 들었던 강의 중에서 제일 이해가 잘돼요 ㅜㅜ
잘 들어 주셔서 감사합니다😊
선생님 사랑합니다❤❤❤❤
강의 굿!! 이해가 너무 잘 됩니다. 강의 잘 들었습니다. 감사합니다.
감사합니다~🤗
쌤 최고입니다!!
감사합니다~😊
와... 비전공자도 너무 쉽게 이해가 되네요... 감사합니다
저도 너무너무 감사합니다😊
학교 수업 듣고 꼭 복습할 때 주강의로 삼아서 학습해요. 감사합니다!
어멋!!! 넘 감사해용🙏 자주 찾아와 주세용
쌤. 배웠던거 복습하면서, 수업시간에서 다루지 않았던 부분들을 공부하려고 유튭으로 왔어요. ㅋㅋㅋ
ㅎㅎㅎㅎㅎㅎ 예쁜 션~❤️
선생님 자료구조 공부 해야돼서 어쩌다 보게 되었는데 c언어 잘 모르는데도 설명을 잘 해주셔서 머리에 너무 잘 들어와요 감사합니다.
저는 자바 개발자인데요 자바에서는 가비지컬렉터가 메모리 관리를 해줘서 메모리에 대해 크게 신경 안 쓰고 코딩했었는데 c에서는 개발자가 직접 메모리 관리를 해줘야 하니깐 두 언어의 차이점도 잘 이해가 되네요. 오늘부터 자료구조랑 알고리즘 강의 감사히 잘 보겠습니다!!
넹넹 감사함니다😊 개발자여서 금방 습득 하실 거 같아요!! 홧팅 입니다!!!
와.. 대박.. 속이 뻥~~
ㅎㅎㅎㅎ 감사합니당😊
너모나 이해가 잘되었습니다! 감사합니다 구독할께요~ //보조개가 너무 이쁘십니다ㅋ
감사합니다🙏 자주 찾아와 주세요!!!
정처기 공부하다가 malloc 찾아봤는데 잘 이해하고 갑니다 ❤❤❤
이해가 되셨다니 기쁘네용😍
포인터에서 한 번 막히고 강의 보고 이해하고
동적 할당에서 또 막혀서 봤는데 정말 잘 가르치시네요
감사합니다😊
이해가 되신다니 제가 더 기쁘네용😊
힘이 되는 댓글 감사합니다:)
허ㅓㄹ,.,. 언니 너무 고마워요 사랑해요
감사합니다🥰
이해가 정말 잘 됩니다!! 감사해요
자도 감사해용😊
탬플릿 영상 찾아보다가 여기까지 왔습니다. 확실히 이해가 잘되네요!
감사합니다! 자주 찾아와주세용~🙏
안녕하세요. 감사히 잘 봤어요.
2023년 10월 11일 수 21시31분 태평양 시간
감사합니다!^^
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
선생님 이해 잘되게 설명 해주셔서 감사합니다!^^
도움이 되신다니 정말 기뻐용😊
바로 구독박고갑니다
아주 감사합니다!👍
기말시험 준비하는 학부생입니다 감사합니다 감사합니다 ㅠㅠㅠ
저도 넘넘 김사합니다~:)
기말 잘보세용~홧팅!!!
선생님. 이런 좋은 강의 올려주셔서 감사합니다.
학교 자료구조 수업이 너무 맘에 안 들어서 일반적으로 '자료구조론'이라고 흔히들 얘기하는 범위에 해당하는 부분(그 과정에서 필요한 알고리즘 내용도 들어가도 괜찮음)을 전체적으로 공부하려고 하는데, 그런 목적으로 선생님께서 '자료구조&알고리즘'이라고 묶어놓은 플레이리스트를 싹 다 보면 될까요?
넹넹^^ 싹다 들으시면 돼용~!
감사합니다:)
@@withhoneyc 그냥 하는 말이 아니라, 정말 대학교 강의보다 훨씬 좋아요. 감사합니다. 자료구조&알고리즘 선생님 강의로 끝내겠습니다!
재귀함수 설명 듣고 넘 좋아서 구독햇습니당 ㅋㅋㅋㅋ 혹시 C언어 강의는 완결이 된건가요? 비전공자인데 고언어가 재밌어서 c도 같이 공부해보려고합니다..!
감사합니다🙏
9월 둘째 주 부터 C언어 기초 강좌를 순서대로 업로드 할 예정입니다.
감사합니당 이해가 잘돼요!! 출처를 남기고 블로그에 공부한걸 기록해도 괜찮을까요!??
넹넹 당연히돼요:)
저희 교수님보다 훨씬 잘 가르치십니다ㅜㅜ
ㅎㅎㅎ 도움이 되셨음 좋겠어용🤗
선생님이 예쁘면 학생 점수가 강제로 올라가는 이유를 증명
ㅋㅋㅋㅋㅋㅋ 성적이 안오르면 제 탓인거죠???
강사님~
오랜만에 글 올립니다.
궁금한것 질문해도 되죠?
다름이아니라 c언어 에서
2차원 배열을 동적할당하고
해제할때,
할당시에는 세로줄인 행을 할당하고 난다음 가로줄인 열배열을 할당
하는데, 동적해제시에는 반대로
가로줄인 열배열을 먼저해제하고,
세로줄인 행배열을 해제한다는
의미가 잘 이해가 안되는데,
자세히 설명 부탁드려도 될까요?
행배열을 먼저 제거하는 순간 동적 할당 된 열배열의 주소는 다 사라져요~열 배열의 주소가 포인터 배열에 저장되어 있기 때문입니다:)
@@withhoneyc 혹시 이 부분에 대해 동영상 설명된 부분이 있을까요?
ruclips.net/video/mGkHJYEoZsg/видео.html
그래프 구현하면서 2차원 배열 동적 할당하긴 했는데…그래프 부분이라 좀 어려울 수도 있어요:)
선생님 강의 너무 잘 듣고 있습니다 😊
예전부터 궁금했는데 램이라는 하드웨어 자체가 스택영역, 힙영역, 데이터영역으로 나누어져 있는 건가용??
네:) 크게 그렇게 나눠졌다고 이해 하시면 될 거 같아요.
이차원배열 동적할당도 보고싶어요
넵! 준비할께요:)
최근 컴파일러가 바뀌었나요? int n을 scanf를 받고나서 malloc 없이 score[n]이라는 배열에 넣어도 정상적으로 컴파일이 되네요..
혹시 Visual studio가 아닌 다른 컴파일러를 사용중이신가요?
C에서 가변 길이 배열(VLA:Variable Length Array)을 사용할 수 있습니다. VLA는 C99 표준에 도입되었으며 컴파일 타임이 아닌 런타임에 크기가 결정되는 배열 생성을 허용합니다. 하지만, 런 타임 시 메모리가 할당 되기 때문에 동적 할당 방식을 이해하는 것은 맞다고 생각합니다.
또한, 배열 크기를 자주 조정해야 하는 경우 VLA가 비효율적 입니다. 특히, VLA는 크기가 매우 크면 잠재적으로 많은 메모리를 소비할 수 있다는 문제도 있습니다. 필요한 메모리 양이 사용 가능한 스택 공간을 초과하면 스택 오버플로 오류가 발생할 수 있습니다. 이 문제를 방지하려면 malloc을 사용하는 것이 좋습니다.
Visual Studio는 C에서 VLA(가변 길이 배열)를 지원하지 않습니다. 이는 VLA가 Visual Studio에서 부분적으로만 지원하는 C99 표준에 도입되었기 때문입니다. 대신 Visual Studio에서는 `malloc()` 및 `free()`와 함께 동적 메모리 할당을 사용하여 가변 크기의 배열을 만들 것을 권장합니다.
- Clang 및 GCC: VLA를 확장으로 지원 합니다.
- Microsoft Visual Studio: VLA를 지원하지 않습니다.
강의에서 메모리 공간을 RAM이라고 표현하셨는데 RAM이 아니라 virtual memory(가상 메모리)로 표현하는게 맞지 않나요?
네:) 가상 메모리 맞습니다.
가상 메모리가 물리 메모리 주소와 매핑되기 때문에 보통 램이라고 많이 얘기하긴 해요^^
@@withhoneyc 아 그래요? 제가 알기론 보통 물리 메모리를 램이라고 부르는지 알고 있었는데..
답변 감사합니당!
@@withhoneyc 네 답변 감사합니다.
맞아요!!! 물리메모리를 램이라해요:)
파일입출력도 다뤄주실수 있나요
ㅋ 넵!
free() 호출 안하면 실행이 종료돼도 해제되지 않는다는 의미인가요?
네:) 시스템 재부팅 시 해제 됩니다.
@@withhoneyc 그 말은 OS쪽에도 문제가 있다는 의미군요.
malloc() 호출은 OS에 대한 요청이고 역시 OS가 응답해 처리하는 부분이니까요
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))가 컴파일이 안되네요 😂😂
넹넹!!! 묵시적으로 형변환 되기 때문에 생략 가능해요!!! g++는 참 엄격해서 공부하기 좋네용😊
타이틀에 momory 오타 있어요~
앗!!! 감사해요!!!ㅎㅎ
올린지 오래됐는데 ㅠㅠㅠ
이제야 알았네요~😊
스코아.. 스코아....
소스코드 : cafe.naver.com/honeyc/46312
어려운거 같은데
ㅠ 많이 어려운 부분이라
MIT공대 댓글학과 출신입니다. 결혼해 주세요