언어/C++

[C++] 미정의 동작

겜도리도리 2023. 3. 21. 18:14
반응형

개요

C++에서의 미정의 동작에 대해 설명한다.

 

미정의 동작

C++에서 미정의 동작은 C++ 언어 표준에 정의 되지 않은 동작을 말한다. 이러한 동작은 운영 체제, 컴파일러, 실행 환경에 따라 결과가 달라질 수 있는 예측할 수 없는 동작을 일으킨다. 예측할 수 없는 동작이 발생하면 프로그램이 비정상적으로 종료되거나, 다른 변수나 객체의 값이 변경되거나, 잘못된 값이 반환될 수 있다.

 

미정의 동작 발생 상황

미정의 동작이 발생할 수 있는 상황은 다음과 같다.

1. Double-free : 이미 해제된 메모리를 다시 해제하는 경우 발생한다. 동일한 메모리 블록을 두 번 해제하려는 시도를 한다면 시스템에서 예측할 수 없는 결과가 발생할 수 있다.
2. Dangling pointer : 이미 해제된 메모리를 가리키는 포인터를 역참조하는 경우 발생한다. 포인터가 가리키는 메모리 블록이 이미 해제되어 더 이상 유효하지 않기 때문에, 시스템에서 예측할 수 없는 결과가 발생할 수 있다.
3. Null pointer dereference (널 포인터 역참조) : 널 포인터를 역참조하는 경우 발생한다. 이 경우에 포인터가 가리키는 메모리 블록이 존재하지 않기 때문에, 시스템에서 예측할 수 없는 결과가 발생할 수 있다.
4. Out-of-bounds access (배열 범위를 벗어난 접근) : 배열의 범위를 벗어나는 인덱스로 메모리에 접근하는 경우 발생한다. 이 경우에 다른 메모리 블록을 잘못 접근하거나, 시스템에서 예측할 수 없는 결과가 발생할 수 있다.
5. 정의되지 않은 연산(undefined operation): C++ 표준에서 명시적으로 정의되지 않은 연산을 수행하는 경우 발생한다.

 

이러한 미정의 동작들은 프로그램의 안정성과 신뢰성을 저하시키며, 디버깅하기 어려운 오류를 발생시킬 수 있다. 따라서, 항상 유효한 메모리 주소를 가리키는 포인터나 참조를 사용하여 메모리에 접근해야 한다.

반응형