CS/C언어

C언어 동적할당

더덕2 2025. 2. 5. 10:13

C언어에는 배열을 선언할 때 그 메모리공간을 직접 할당해줘야한다.

 

그렇기 때문에 malloc, colloc, realloc함수가 있는데,

 

malloc함수는 고정된 크기의 메모리 할당이고

 

colloc함수는 malloc과 같지만 메모리를 초기화하는 부분이 추가되어있다.

 

realloc함수는 malloc함수에 고정으로 할당된 메모리를 추가로 늘려줄 수 있지만 할당되었던 주소가아닌 새로운주소로 메모리를 할당하여 덮어쓰기 때문에 temp로 주소값을 백업해두는게 좋다고 한다.

 

 

C언어에서 malloc함수가 동적할당이라 하길래 가변적으로 데이터값도 늘어나겠구나 생각을했지만 고정으로 값을 할당하며 realloc으로 더 늘려줘야한다고 chat gpt에서 보았다.

 

그래서 malloc함수를 통해 5로 메모리할당하고 값을 계속 집어 넣어봤는데 

 

되길래 뭐지.. 했는데.. 이게 미정의 동작이라고 (Undefined Behavior) 하는데 프로그램이 잘못된 동작을 할때 컴파일러나 운영체제가 어떻게 처리할지 정의하지 않은 상태라고 한다.

 

이게 계속되면 어디서 쓰고있는 메모리에  할당되서 쓸수도있기때문에 어떤일이 발생할지 아무도 보장할수없는 상태라 굉장히 위험한 상태란것을 알게되었다...

 

보안취약점으로도 이어질수있기때문에 항상 신중해야할 것 같다.

 

동적할당 함수 쓰고난 후 메모리 누수를 방지하기위해 free(동적할당메모리); 를 선언하는것도 잊지말자.