C 언어 / C++ 언어 제12강 메모리 동적 할당 하여 배열 출력하기 (malloc 함수, 메모리 동적 할당)
이번 시간에는 메모리 동적 할당에 대해서 배워보겠습니다.
메모리 동적할당이란?
메모리는 우리가 사용하는 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++ 기법을 외우시는 것을 추천드립니다. 감사합니다.