본문 바로가기

C++74

[ C++ ] new 와 delete를 이용한 메모리 동적할당, 메모리 누수(Memory Leak)에 대하여.. 우선 동적 할당이란 " 프로그램 실행 중에 동적으로 메모리를 할당하는 것을 말합니다." 즉, 런타임 중에 메모리를 할당한다는 것이고, 동적으로 할당된 메모리는 Heap영역에 할당이 됩니다. 프로그램을 개발하다 보면 상황에 따라 메모리 공간을 실시간으로 확보해야 하는데 그때 사용하는 게 메모리 동적 할당입니다. C에서는 malloc로 힙 영역에 할당해주고, free로 힙에 할당된 메모리 공간을 소멸합니다. C++에서는 new로 힙 영역에 할당해주고, delete로 힙에 할당된 메모리 공간을 소멸합니다. 하지만 C++에서는 C언어의 헤더 파일을 추가하는 것도 가능하기 때문에 malloc와 free도 사용이 가능합니다. 그러면 먼저 malloc와 free를 이용한 메모리 동적 할당 예제를 보겠습니다. char.. 2019. 9. 6.
[ C++ ] Call-by-value , Call-by-reference 함수의 호출 형태는 크게 Call-by-value와 Call-by-reference로 나뉜다. Call-by-value * Pass-by-value 라고 불리기도 함. Call-by-value는 값에 의한 호출로, 함수의 인자로 넘기는 값을 복사해서 새로운 함수에 넘겨주는 방식이다. 즉, 값을 인자로 전달하는 함수의 호출 방식이다. 예로 들어 두 변수의 값을 바꿔주는 함수가 있다고 가정하자. void swap(int a, int b) { int temp = a; a = b; b = temp; } 겉으로 봤을 때는 a와 b 값을 바꾸는건 성공이다. 하지만 함수 외부에 선언된 변수 또한, 바뀌었을까? num1의 값은 a에 복사되고 num2의 값은 b에 복사되어 전달하기 때문에, num1과 num2의 값이 바.. 2019. 9. 5.
[ C++ ] const ( 상수 )의 활용 const 키워드와 함께 정의한 변수의 값은 수정이 불가능하다. 즉, 프로그래밍시에 바뀌어서는 안될값이 있을 경우 활용할 수 있다. 또한 코드가 길어질 경우 실수로 변수의 값이 바뀌어 지는것을 방지할 수 있다. const의 예는 다음과 같다. const int num = 10; -> "변수 num을 상수화" 그래서 num 값을 변경시에 컴파일 에러가 발생하는 것을 볼 수 있다. 그럼 포인터의 예를 살펴보자. const int *ptr1 = # -> "포인터 ptr1을 이용해서 num의 값을 변경 할 수 없음." 그래서 ptr1로 ptr1가 가리키고 있는 값을 변경할려고 할 때 컴파일 에러가 발생하는 것을 알 수 있다. 그러나 ptr1의 주소 값을 변경 할 수 있다. * num에 다이렉트로 접근하면.. 2019. 9. 5.
[ C++ ] 선행처리기 / 전처리기 ( Preprocess ) 다음 포스터인 inline에 들어가기 전에 C에서 배웠던 전처리기에 대해 복습하자. C++에서 컴파일되는 과정은 다음과 같습니다. "프로그래머가 작성한 소스파일은 가장 먼저 소스파일에 대한 처리를 하는 선행 처리기를 거치고, 컴파일되어 오브젝트 파일이 생성되고, 다시 링커에 의해 실행파일이 된다. " 즉, 전처리이자 선행 처리(Preprocess) 란? 실행 파일을 생성하는 과정에서 컴파일하기 전, 소스 파일 내에 존재하는 선행 처리 지시문을 처리하는 작업을 의미합니다. 또한, 선행 처리를 위한 명령에는#define,, #undef, #include, #if, #ifdef, #elif, #else 등 맨 앞에 #기호가 붙는다는 공통점이 있습니다. ( 선행처리를 위한 명령 = 전처리 문 = 전처리기 연산자.. 2019. 9. 5.