알버트의 개발하는 블로그
C 언어 / C++ 언어 제12강 메모리 동적 할당 하여 배열 출력하기 (malloc 함수, 메모리 동적 할당) 본문
C 언어 / C++ 언어 제12강 메모리 동적 할당 하여 배열 출력하기 (malloc 함수, 메모리 동적 할당)
알버트 2021. 4. 29. 14:17
이번 시간에는 메모리 동적 할당에 대해서 배워보겠습니다.
메모리 동적할당이란?
메모리는 우리가 사용하는 PC에서 쓰고 있는 저장 공간이라고 생각하시면 되는데요.
프로그래밍 상에서 우리가 자료를 저장할 때 이 자료들이 저장되어 지는 공간이 바로 메모리입니다.
우리가 변수를 선언하고 그 안에 값을 저장하면 그 값만큼 메모리가 할당되어지는데요.
메모리 동적할당이란 것은 이 메모리를 우리가 동적으로, 원하는 만큼 할당하여 사용할 수 있다는 것입니다.
그래서 메모리 동적할당은 주료 배열에서 많이 쓰입니다. 배열의 크기를 우리가 원하는 만큼 할당하고 싶을 때 사용하게 됩니다.
메모리 동적할당 예제
우선 비쥬얼 스튜디오에서 빈 프로젝트를 만드시고 소스파일을 만드셔서 이 코드를 적어보겠습니다.
대표사진 삭제
사진 설명을 입력하세요.
이렇게 되어지는데요. 잘 이해가 안되시면 주석이랑 같이 보시면 될 것 같습니다.
malloc함수를 통해서 메모리를 동적 할당하고 있습니다. malloc은 c언어에서 제공하고 있는 메모리 동적 할당법입니다.
자료타입 *배열이름 = (자료타입 *)malloc(sizeof(자료타입)) * 원하는메모리크기);
이렇게 코드를 입력하시면 메모리를 동적할당할 수 있습니다.
입력한 값만큼의 크기를 가진 배열이 생성되는 것을 알 수 있습니다.
그리고 나서 FOR문을 통해서 dataC라는 이름의 배열의 원소들을 쭉 출력할 수 있도록 해주었습니다.
여기서 memset이란 함수는 각 배열의 모든 값을 0으로 초기화시켜주는 함수인데요.
이따가 다시 한번보고, 이제 실행해볼까요?
대표사진 삭제
사진 설명을 입력하세요.
이처럼, 배열의 크기 10을 입력하면 0부터 9까지 총 10개의 원소가 출력된 것을 알 수 있습니다.
(배열은 0번부터가 첫번째입니다~)
우리가 memset이란 함수로 각 원소를 0으로 초기화시켰으므로 모든 값이 0이 나온 것을 알 수 있습니다.
이번엔 c++ 에서 제공하는 메모리 동적 할당 기법을 보겠습니다.
대표사진 삭제
사진 설명을 입력하세요.
주석은 지우고 변수의 이름은 cppN으로, 배열도 이름을 바꾸었습니다.
다른 부분은 달라진 것이 없지만, 메모리 동적 할당해주는 문장만 바뀌었습니다. C++이 더 간단합니다. 프로그래밍에선 간단하게 쓰는 것이 유리하죠.
자료타입 *배열이름 = new 자료타입[원하는메모리크기];
이렇게만 선언해주시면, 배열에 원하는 메모리크기만큼 동적으로 할당해줄 수가 있습니다.
한번 실행해볼까요?
대표사진 삭제
사진 설명을 입력하세요.
이렇게 10이란 숫자를 입력하니까 10개의 원소가 출력된 것을 알 수 있습니다.
그런데, 값이 조금 이상하죠? 왜냐하면 우리가 원소들을 초기화해주지 않았기 때문입니다.
초기화해주지 않아서 변수 안에 있던 쓰레기값이 그대로 출력된 것입니다. 쓰레기는 버려야겠죠?
아까 우리가 썼던 memset이란 함수가 바로 초기화해주는 함수입니다.
대표사진 삭제
사진 설명을 입력하세요.
저 부분을 추가해주면 모든 값이 0으로 초기화된다는 것을 알 수 있습니다.
memset(배열이름, 0, _msize(배열이름));
이렇게만 선언해주시면 배열에 들어있는 모든 원소들이 0으로 초기화가 됩니다.
이제 for문으로 동적할당된 배열을 출력해보면??
대표사진 삭제
사진 설명을 입력하세요.
이번엔 15를 입력했더니, 15개의 원소가 출력된 것을 알 수 있습니다.
이처럼 메모리 동적 할당은 나중에 실질적으로 프로그램을 짜다 보면 많이 사용되어지는 기법입니다.
그래서 꼭 잘 익혀두셔야만 합니다.
c언어와 c++ 둘다 같은 기능을 제공하고 있지만 아무래도 c++ 이 더 간단하기 때문에 만약 외우고 싶다면 c++ 기법을 외우시는 것을 추천드립니다. 감사합니다.
'프로그래밍 언어 > C & C++' 카테고리의 다른 글
C 언어 / C++ 언어 제14강 이차원 배열 ( 반복문 활용하여 이차원 배열 출력하기 ) (0) | 2021.04.29 |
---|---|
C 언어 / C++ 언어 제13강 랜덤 난수 이용하여 주사위 눈 세기 (srand 함수, rand 함수, time 함수) (0) | 2021.04.29 |
C 언어 / C++ 언어 제11강 함수 사용하기 (사용자 정의 함수 사용) (0) | 2021.04.29 |
C 언어 / C++ 언어 제10강 비쥬얼 스튜디오 콘솔창 유지하기 (실행화면 유지) (0) | 2021.04.29 |
C 언어 / C++ 언어 제9강 기본 1차원 배열 (0) | 2021.04.29 |