알버트의 개발하는 블로그

C 언어 / C++ 언어 제12강 메모리 동적 할당 하여 배열 출력하기 (malloc 함수, 메모리 동적 할당) 본문

프로그래밍 언어/C & C++

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++ 기법을 외우시는 것을 추천드립니다. 감사합니다.