C++ 다시 익히기 3 – new,delate

새롭게 delate 개념 C 언어와 C++의 차이점

출처 modoocode.com/98

배열을 결정할 때, 그 사이즈는 본인 컴파일 시각으로 확정되어 있지 않으면 안됩니다. 즉, 컴파일러가 배열의 크기를 추측할 필요 없이 명확하게 본인이어야 한다는 것입니다.낭비성 자원을 방지하기 위해 ‘학생수’를 입력하고 해당 학생수만큼 배열 크기를 지정하는 방법 동적 메모리 할당의 이야기로서 동적으로 메모리를 할당합니다. 여기서 ‘동적’이라는 것은 정해진 것이 아니라 가변적으로 바뀔 수 있다는 것입니다. 역시 메모리를 ‘연결’합니다라는 이 내용은 역시 우리가 배열을 정의하면 배열에 맞는 메모리의 특정 공간이 배열을 본인처럼, 메모리의 특정 부분을 사용할 수 있도록 맞춰줍니다.1. malloc함수의

원하는 int 배열의 원소 개수를 입력 받았습니다.

이 함수의 이름은 malloc이며, memoryallocation의 약자인 이 함수는 에 정의되어 있기 때문에 #include를 추가해야 한다.이 함수는 현재 보내진 크기의 바이트 수만큼 메모리 공간을 만듭니다.원소의 개수가 Size Of Array인 int형 배열을 만들기 위해서는 당연히 (int 크기)* (Size Of Array)가 될 것입니다. 이 때 int 타입의 크기를 확신하기 위해 size of 키워드를 사용하게 됩니다. size of는 이런 타입의 크기를 알려줍니다. 따라서 size of (int) *Size Of Array를 Import 해주세요.이 함수가 리턴하는 것은 자신이 할당한 메모리의 시작 주소를 리턴하게 됩니다. 이때 리턴형이 (void*)형이기 때문에 우리는 이것을 (int*)형으로 형 변환해서 arr에 넣으면 됩니다. 마치 malloc 함수가 공원에 돗자리를 펴는 것과 같습니다. 사람들로 가득 찬 공원에서 malloc 함수는 “원하는 크기의 돗자리”를 깔고, 이 돗자리에서 사람이 오도록 손을 흔드는 역할을 하는 것과 같습니다.그래서 arr에는 malloc가 할당해 준 메모리를 이용할 수 있게 됩니다. 즉, arr [Size Of Array] 정도를 사용할 수 있게 됩니다.​

그래서 마지막으로 free는 우리가 할당받은 다 쓴 다음에 메모리 영역을 컴퓨터로 넘겨주는 역할을 합니다. free를 제대로 하지 않으면, 딱히 사용하지 메모리를 자리만 잡게 됩니다.이렇게 free를 제대로 수행하지 못해 발생하는 문제를 메모리 누출(memory leak)이라고 합니다. 이는 마치 공원에 돗자리를 깔아놓고 집에 두고 돌아오는 것과 같다. 2.1차원 배열 메모리 동적으로 되다 1차원 배열 메모리 동적할당(Heap)arr은 힙에 위치하고 있습니다.

3.2차원 배열(정확히 이 내용이라면 우리가 알고 있는 2차원 배열과 달라도) 메모리 동적 할당

실행

만약 intarray[3];라고 하는 배열을 만들었다면 array의 형태는 int**입니다.int*arr[10]; 라고 하는 배열을 만들었다면 arr의 형태는 int*arr.

위와 같이 int*형의 배열을 동적할당할 수 있었습니다. 위의 프로세스에 따르면 arr은 향후와 모습이 될 것입니다.​

>

>

arr일의 원소가 사이즈가 y인 배열을 가리키고 있는데, arr의 원소가 x개이기 때문에 전부 적으로 봐서 총 x*y 배열을 갖는 셈인데, 이렇게 만들어진 배열은 정확하게 스토리로 2차원 배열이기 때문에 스토리는 어렵습니다. 왜냐하면 배열은 메모리에 연속되어 있어야 하기 때문입니다. 예를 들면, 지난 시간에 나온 사진들을 조금 가져오면,

>

‘2차원 배열처럼 생긴’ 포인터 배열은 2차원 배열과 달리 함수의 인수인상으로 쉽게 처리할 수 있습니다.아래와 같이

arr[3] [4]는 *(arr+3)+4로 해석되는데, *(arr+3)을 통해서 arr의 네 번째 원소에 접근하게 되고 *(arr+3)는 과인이 가리키는 int형 배열의 주소 값을 의미하기 때문에 +4를 하면 int형 배열의 다섯 번째 원소에 접근하는 것과 같습니다.예시

​​​​

출처 modoocode.com/169

C 언어에서는 malloc와 무료 함수를 지원하며 힙상에서 메모리 할당을 지원했습니다.C++에서는 new 와 delete 라고 말할 수 있습니다. new는 이야기대로, malloc와 대응하는 것으로서 메모리를 할당하고, delete는 무료로 대응하는 것으로서 메모리를 해제한다.​

새로운 사용법

예제

예제/조건: 동물(struct Animal)이라는 구조체를 정의하고 이름(charname[30]), 나쁘지 않은(intage), 체력(inthealth), 만복도(intfood), 청결도(intclean) 값을 갖는다.*처 sound에 동물구조체의 포인터 배열(struct Animal*list[30])을 설치하여 사용자가 동물을 추가할 때마다 그때그때 발발을 할 것입니다.*play라는 함수를 만들어 동물의 상태를 변경하고, show_stat 함수를 만들어 지정하는 동물의 상태를 출력합니다.* 1턴이 지날 때마다 동물의 상태를 변경합니다. 1턴이 지날 때마다 동물의 상태를 변경할 생각이에요.​

탈출각?