본문 바로가기

main70

[C++] 메모리 누수 (memory leak)와 CRT 라이브러리 메모리 누수 동적할당을 사용하여 메모리를 사용한 다음 이 메모리를 해제해주지 않으면 계속해서 남아있게 되고 나중에 실제 프로그램이 실행되는 중에 문제가 발생할 수 있습니다. 이렇게 동적할당으로 메모리를 할당하고 메모리를 해제하지 않는 경우는 메모리 누수(memory leak)이라고 합니다. 하지만 컴파일러는 이를 error로 생각하지 않기 때문에 메모리 해제를 하지 않았다고 해서 error를 띄어주지 않습니다. 따라서 메모리 누수로 인해 문제가 발생하면 이를 찾기가 어렵습니다. 따라서 이런 경우에는 CRT 라이브러리를 사용하여 메모리 누수를 찾아야 합니다. CRT 라이브러리 메모리 누수를 탐지하기 위해서는 헤더를 포함해야 합니다. 그리고 코드 실행의 맨 앞에 _CrtSetDbgFlag(_CRTDBG_AL.. 2018. 1. 24.
[C++]new delete 동적할당 지역변수 우리가 일반적으로 사용하는 지역 변수 선언을 정적으로 선언하였다고 한다. 즉, 다음과 같은 변수와 배열의 선언을 정적으로 선언하였다고 한다. int nData = 0; int arData[10] = {}; 자료형과 배열의 크기에 맞춰서 메모리 영역에 공간을 할당해 주는 것이다. 이런 지역 변수가 할당되는 메모리의 영역을 스택(stack) 영역이라고 하며 선언된 지역 내에서만 사용가능하며 선언된 지역을 벋어나면 스택 영역에서 사라지게 된다. 이러한 지역변수의 경우에는 컴파일 타임에 크기를 결정하기 때문에 런 타임 시기(프로그램이 실행되고 있는 중)에 지역 변수를 새로 생성하고 사용하는 것은 불가능하다. 따라서 런 타임 시기에 메모리를 잡아서 사용하기 위해서는 동적할당을 사용해야 한다. ***** .. 2018. 1. 24.
[C]Type Casting Type Casting 캐스팅의 경우 묵시적 케스트(implicit cast)와 명시적 케스트(explicit cast) 두 가지로 나눌 수 있습니다. 묵시적 케스트는 연산자를 사용하지 않고 형 변환이 이루어지는 경우를 말합니다. 명시적 케스트는 연산자를 사용하여 형 변환을 하는 경우를 말합니다. int i = 10; char c = i; //묵시적 케스트 char c =(char)i; //명시적 케스트 (c-style) 묵시적 케스트의 경우 컴파일러에 의해 자동으로 형 변환이 이루어지고, 명시적 케스트의 경우 사용자에 의해 강제적으로 형 변환을 시키는 것이다. 정적 케스트(static cast) 정적 케스트의 경우 static_cast 를 사용하여 형 변환을 합니다. int i = 10; char c .. 2018. 1. 11.
[C]변수 const 변수 const 변수에 const 키워드를 붙여서 사용할 경우 그 변수를 읽기 전용(상수화) 시킨다는 뜻이다. 즉 const를 붙여서 읽기 전용(상수화) 된 변수는 그 값을 변경할 수 없는데, const 키워드를 어디에 붙이느냐에 따라서 그 의미가 조금씩 달라진다. const 키워드는 상수화 키기고 싶은 곳 뒤에 붙여서 그것을 읽기 전용(상수화) 시킨다. 기본 type const const int nData = 10; const 키워드를 붙여서 int형 변수 nData의 값을 읽기 전용(상수화) 시키고 있다. 기본적인 사용 방법으로 const 키워드가 맨 앞에 위치해 있지만 원래 위치는 다음과 같다. int const nData = 10; 이렇게 상수화 시키고 싶은 type의 뒤에 위치했지만 다른 키워드.. 2018. 1. 11.
[C]kbhit(), getch(), 방향키입력 kbhit() kbhit() 함수는 키보드가 입력되었는지를 확인하는 함수이다. 즉, 입력 버퍼의 내용을 확인하여 키의 입력이 있다면 true 없다면 false를 반환한다. kbhit() 함수의 장점은 waiting 함수가 아니라는 점이다. 만약 입력 함수를 통해 키의 입력을 확인하려고 입력 함수를 호출한 시점부터 대기 상태에 들어가서 입력이 들어올 때까지 기다리게 된다. 하지만 kbhit() 함수의 경우 입력이 있든 없든 바로 반환하기 때문에 반환 값에 따라 작업을 진행하게 할 수 있다. getch() scanf_s()와 비슷하게 입력을 받는 함수이다. scanf_s()와 다른 점은 입력한 키보드의 내용이 화면에 출력되지 않는다는 점이다. 또한 Enter key를 통해 입력을 확인하지 않고 키를 누른 순.. 2018. 1. 9.