개인공부/C++

구조체, 동적할당

Itsumo 2022. 12. 3. 03:39

 

구조체에 값을 대입하고 싶을때는 만약 포인터 구조체를 통해서 구조체의 주소가 s이면

로 정의가 가능하다.

 

동적할당

특징 

1. 런타임 중에 대응가능

2. 사용자가 직접 관리해야함(해제)

 

malloc (숫자); 는 숫자만큼의 공간을 가지는 힙메모리는 동적할당해준다

말록의 특징으로는 void 타입이기때문에 자신이 원하는 자료형 타입으로 바꾸어서 사용한다.

그러므로 malloc은 void  포인터의 특징을 가지고 있다.

이러한 함수를 이용하여 힙메모리를 관리가능하고 다른언어가 없는  특징을 가진다.

 

가변배열

 

가변하는 배열이기때문에 힙메

모리 영역을 이용한다.

int arr[변수]  ={}; 는 불가능하다 

왜냐하면 처음에 프로그램이 실행되고 메인함수의 스택메모리 크기를 할당해야하는데

배열의 크기에 변수가있으면 메모리값 할당이 불가능하기때문이다

 

하지만 힙메모리 영역을 이용하여 가변배열을 직접 만들 수 있다.

이과정은 동영상 강의를 듣고 따라서 만들어 보았지만 직접 만들어 보는것이 중요하다고 생각해서 

직접 구현해보았다.

 

 

 

이러한 과정에서 새로운 배열을 생성하는데 malloc 의 크기조절을 실패해서 힙버퍼가 발생했다.

힙버퍼란 힙데이터 영역에서 일어나는 버퍼 오버플로우의 일종이다.

데이터 크기가  20바이트인데 그 이상의 영역에 값을 대입하고 그 이후에 초기화를 해주지 못해서

힙메모리 공간에 데이터가 다른 데이터 값에 영양을 주는 현상을 발생시킨다.

 

결과적으로 malloc 의 정의를 다시한번 이해하고 디버깅 과정을 통해서 가변배열을 완성시켰다.