CPP_어소_44_가변배열 (3)

CJB_ny·2022년 6월 26일
0

CPP_AROTHO

목록 보기
43/83
post-thumbnail

가변배열 기능

재할당

ReloacteArr();

malloc 함수 다시생각

원하는 만큼의 바이트 수를 요청을 하고 힙 메모리 영역 어딘가에

내가 요청한 사이즈 만큼 (단위는 바이트) 할당된 메모리 공간의 주소를 받는다.

그런데 이 동작에서 내가 원하는 곳의 주소를 할당 받을 수 있나?

이런거 정의 가능? => ㄴㄴ. 없다.

Heap Corruption 힙손상

지금 무슨 경우냐면 '0'하나 잘못 붙여서 힙메모리의 어떤 다른 공간(중요한) 부분에 데이터를 건드릴 수 있다.
(CPP는 이런거 관여 안함)

비엔나 소세지마냥 이렇게 늘리는거 가능?

(되긴 할거같음..)

그래서 처음에 동적 할당을 받을 경우, 충분히 넉넉한 공간을 잡아 주어야한다.

재할당

지금 이렇게 2칸 다 차면 arrMaxCount 2 (sizeof(int)) 만큼

malloc으로 새로운 힙 메모리 공간 할당 받은 상황이다.

그런데 malloc이 return한 주소값을 어떻게 할 것인가??


pInt가 새로운 주소를 할당 받게 됨.

이래서 "지역변수" 필요하다.

큰집으로 이사 가야함.

순서

이런식으로 가능.

함수 호출

지금 main.cpp에서는 RelocateArr함수를 호출할 수 있다.

=> 의도한 바는 아니지만 그냥 호출해서 크기를 늘릴 수 있음.

이럴경우 지금 이 함수는 arr.h에 선언이 되있기 때문에 가능한데

지금 Arrary.cpp에서 선언 및 구현이 되어있어서

이런경우를 막고 싶다면 굳이 arr.h에 선언되어있는

이부분 없애도 노상관임.

그러면

이렇게 선언되어있지 않아서 호출 못함.

정리

  • 데이터를 계속해서 확장하면서 넣는 과정을 가변배열이라 한다.

  • 함수 호출 할 경우 헤더와 cpp파일 분리 (보안?)

  • Reloacte함수에서 arrCount, arrMaxCount의 대소 유무

profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글