2019. 2. 17. 15:29
728x90

<요약>

전처리문
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>

누수 확인
_CrtDumpMemoryLeaks();

할당 지점 브레이크
_crtBreakAlloc = 할당번호;

메모리 상태 체크
_CrtMemState 구조체에 담기
_CrtMemCheckpoint(&구조체변수이름); 으로 체크


전처리문으로 다음 내용을 추가한다.
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>

메모리 누수를 확인할 시점에 아래 함수를 작성한다.
_CrtDumpMemoryLeaks();

_CrtDumpMemoryLeaks()은 메모리 누수가 있는 경우 1을 리턴, 없을 경우 0을 리턴한다.
메모리 누수에 대한 상세한 정보는 디버그 창에서 확인할 수 있다.

{166}은 메모리 할당 번호
at 뒤에 있는 0x0007A828은 메모리 주소
16 bytes long은 누수된 메모리 크기
Data: 뒤에 있는 내용은 메모리 내용이다.

_CrtDumpMemoryLeaks()가 실행되는 시점에 메모리 누수 여부를 체크한다.
프로그램 전체에 대해 확인하고 싶다면 프로그램이 종료되는 부분에 작성해두도록 한다.

누수가 발생하는 메모리 할당 번호에서 디버깅 중단점이 발생하기 원한다면 해당 메모리의 할당시점보다 이전 시점에 아래 내용을 작성해두면 된다.
_crtBreakAlloc = 메모리 할당 번호;
그러면 아래와 같이 메모리 할당 번호에 해당하는 지점에서 브레이크 포인트가 걸린다.


메모리 누수가 얼마나 일어나는가에 대해 콘솔에서 확인을 해보고 싶은 경우에는 _CrtMemState 구조체를 이용해보는 것도 방법일 수 있다.
_CrtMemState는 다음과 같이 구성되어 있다.

#define _MAX_BLOCKS      5
typedef struct _CrtMemState
{
    struct _CrtMemBlockHeader* pBlockHeader;
    size_t lCounts[_MAX_BLOCKS];
    size_t lSizes[_MAX_BLOCKS];
    size_t lHighWaterCount;
    size_t lTotalCount;
} _CrtMemState;

메모리 상태를 체크할 시점에
_CrtMemCheckpoint(&구조체 변수 이름) 함수를 사용하면 해당 시점의 메모리 정보가 구조체에 입력된다.

이를 통해 특정 시점 전 후의 상태를 기록하여 이 둘을 비교하면 메모리 누수가 어느정도 발생했는지 파악할 수 있다.
구조체 구성 중 lCounts는 메모리에 할당된 변수의 개수, lSizes는 메모리에 할당된 용량의 크기를 나타낸다.


참고 자료: https://docs.microsoft.com/ko-kr/visualstudio/debugger/finding-memory-leaks-using-the-crt-library?view=vs-2017

728x90
Posted by 아야카
2019. 1. 21. 03:15
728x90

POCU에서 input redirection 설정에 대해 언급이 됐었는데 실제 적용이 어떻게 되는가에 대해서는 언급이 되지 않는 것 같아
직접 알아보고 파악한 부분에 대해 블로그 포스팅으로 남긴다.


<설정>
1. 프로젝트 속성 -> 디버깅 에 들어간다.
2. 명령 인수에 입력으로 쓸 파일 이름을 입력한다. (빨간 박스 친 부분)
3. 빌드하여 디버깅 모드로 실행하면 명령 인수에 입력한 파일에 입출력이 진행된다.


<예시>
테스트용 코드

int main()
{
	string text;
	string trash;
	while(cin.eof() == false)
	{
		cin >> text;
		if (cin.fail() == true)
		{
			cin.clear();
			cin >> trash;
		}
		else
		{
			cout << text << endl;
		}
	}
	return 0;
}


입력파일 샘플

이 상태에서 디버깅을 실행하면 입력이 필요한 부분은 모두 test.txt 파일 내용을 읽는 것으로 대체된다.



출력 인수를 설정하지 않은 경우

cout으로 출력하는 상황이므로 콘솔창에 모두 출력된다.


출력 인수를 text.txt로 설정한 경우

이렇게 text.txt라는 파일에 출력하게 된다.
이 때 콘솔창에는 아무런 내용도 출력되지 않는다.

728x90

'공부 > C++' 카테고리의 다른 글

Visual Studio와 erase 함수  (0) 2019.09.15
Visual Studio에서 CRT 라이브러리로 C++ 메모리 누수 검사  (0) 2019.02.17
Posted by 아야카
2019. 1. 5. 06:08
728x90

Longest Collatz sequence

Problem 14

The following iterative sequence is defined for the set of positive integers:

n → n/2 (n is even)
n → 3n + 1 (n is odd)

Using the rule above and starting with 13, we generate the following sequence:

13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1

It can be seen that this sequence (starting at 13 and finishing at 1) contains 10 terms. Although it has not been proved yet (Collatz Problem), it is thought that all starting numbers finish at 1.

Which starting number, under one million, produces the longest chain?

NOTE: Once the chain starts the terms are allowed to go above one million.

어떠한 수 n에 대해 콜라츠 추측을 거치는 횟수는 동일하다. 그리고 수의 범위는 100만. 
문제 풀이의 목적은 어디까지나 횟수를 구하는 것이므로 각 수에 대한 콜타츠 추측 횟수를 기록하면 된다. 
예를들어 arrNum 배열이 있다고 할 때 

arrNum[2]는 2 -> 1로 1회.
arrNum[3]는 3 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2로 6회를 거치고 2는 체인이 1회므로 3의 체인은 7회.
arrNum[6]은 6 -> 3으로 1회를 거치고, 3은 체인이 7회이므로 6의 체인은 8회

이와 같은 방식으로 진행하면 100만까지의 모든 수에 대한 콜라츠 추측을 빠르게 구할 수 있다.
재귀함수를 이용한다면 arrNum[3]의 과정에서 3, 10, 5, 16, 8, 4의 체인 값을 바로 파악할 수 있어 연산 시간을 조금 더 줄일 수 있게 된다.



728x90

'공부 > 문제풀기' 카테고리의 다른 글

프로젝트 오일러 문제 16  (0) 2019.06.02
프로젝트 오일러 문제 15  (0) 2019.06.01
프로젝트 오일러 문제 13  (0) 2018.12.23
프로젝트 오일러 문제 12  (0) 2018.11.24
프로젝트 오일러 문제 11  (0) 2018.11.18
Posted by 아야카
2018. 12. 23. 20:42
728x90

Large sum

Problem 13

Work out the first ten digits of the sum of the following one-hundred 50-digit numbers.


50자리 수 100개를 모두 더했을 때의 앞의 열자리 수 구하기 문제.

파이썬 같은 언어에서는 그냥 변수를 모두 더해줘서 앞의 10개만 읽어주면 되지만 C++에서는 일반적인 변수에서는 그리할 수 없으므로 별도의 방법을 모색해야 한다.



728x90

'공부 > 문제풀기' 카테고리의 다른 글

프로젝트 오일러 문제 15  (0) 2019.06.01
프로젝트 오일러 문제 14  (0) 2019.01.05
프로젝트 오일러 문제 12  (0) 2018.11.24
프로젝트 오일러 문제 11  (0) 2018.11.18
프로젝트 오일러 문제 10  (0) 2018.11.12
Posted by 아야카
2018. 12. 9. 02:16
728x90

1. 자바 설치하기

자바를 사용하기 위해서는 Java Run Environment(자바 동작 환경, 이하 JRE)가 설치되어야 한다.
개발을 위해서는 Java Development Kit(자바 개발 도구, 이하 JDK)이 설치되어야 한다.
JDK에는 JRE가 포함되어 있으니 개발을 진행하고자 할 때는 JDK만 설치하셔도 된다.

설치를 위해 Java SE - Downloads 페이지로 접속한다.
https://www.oracle.com/technetwork/java/javase/downloads/index.html
자신이 설치해야 하는 버전을 확인하고, 해당하는 버전의 자바를 다운로드 받는다. 


글을 쓰는 시점에는 Java SE 11.0.1이 최신버전이네요.

다운로드 받을 때는 약관에 먼저 동의를 한 후, 자신의 운영체제에 맞는 설치 파일을 받도록 한다. 이 글에서는 Windows의 exe 파일을 받도록 한다.

다운받은 파일을 실행한다. 윈도우10이라면 설정에 따라 "Microsoft Sotre에서 검증된 앱이 아닙니다."라는 경고창을 띄울텐데 [그래도 설치]를 눌러서 설치를 진행하면 된다.

설치 구성요소를 설정할 때 자바를 설치할 경로를 정할 수 있다. 환경 변수 설정과 관련이 있으니 필요하다면 별도의 경로의 지정해두도록 한다.
경로 설정이 완료됐다면 [Next >]를 눌러 설치를 진행한다.



2. 환경변수 설정하기

자바를 사용하기 위해서는 환경변수를 설정하여야 한다. 환경변수 창은 Windows 10 기준으로 아래의 순서대로 진행하면 열린다.

1) 파일 탐색기를 연다.
2) 왼쪽에서 [내 PC]를 우클릭 - 속성(R) 클릭
3) 시스템 창 왼쪽의 [고급 시스템 설정] 클릭
4) 환경 변수 (N)... 클릭

이렇게 하면 환경변수 설정 팝업이 뜬다.
여기서 새로만들기를 통해 각각 아래의 시스템 변수를 추가한다. 

1)
변수 이름(N): JAVA_HOME
변수 값(V): C:\Program Files\Java\jdk-11.0.1 (위에서 진행한 자바 설치 경로를 기입)
※ jdk 버전이 달라질 경우 JAVA_HOME 경로도 그에 맞게 변경해줘야 할 수도 있다.

2)
변수 이름(N): CLASSPATH
변수 값(V): %JAVA_HOME%\lib

위와 같이 시스템 변수를 설정해준 후 Path라고 되어 있는 것을 더블클릭 한 뒤 아래 내용을 추가한다. 
%JAVA_HOME%\bin
※ Windown 7 이하는 기존의  Path 내용을 그대로 놔둔 상태로 내용 뒤에 추가해야 한다.
%JAVA_HOME%bin의 앞뒤에 세미콜론 ( ; )이 있는지 확인하고 없을 경우 세미콜론을 추가하도록 한다. ;%JAVA_HOME%bin; 가 되도록.



3. 설치 확인

환경변수가 잘 설정됐는지 확인하려면 명령 프롬프트(Windows 키 + R 입력 후 - cmd)를 실행하여 아래의 세 커맨드를 순서대로 입력해 본다.

java
javac
java -version

위 세 개의 커맨드는 모두 자바 설치 경로에 있는 bin 폴더의 실행파일이다.
위 명령어들이 모두 잘 작동한다면 자바에 대한 환경변수 설정이 정상적으로 이루어진 것이다.
만약 실행이 되지 않고 에러가 발생한다면 환경변수 설정에 문제가 있어서 작동하지 않는 것이니 환경변수에 들어가 경로 입력이 제대로 되어 있는지 확인해볼 필요가 있다.

정상적으로 설정이 되었다면 위와 같이 도움말이나 정보가 출력된다.

728x90
Posted by 아야카
2018. 11. 24. 19:33
728x90

Highly divisible triangular number

Problem 12

The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten terms would be:

1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...

Let us list the factors of the first seven triangle numbers:

 1: 1
 3: 1,3
 6: 1,2,3,6
10: 1,2,5,10
15: 1,3,5,15
21: 1,3,7,21
28: 1,2,4,7,14,28

We can see that 28 is the first triangle number to have over five divisors.

What is the value of the first triangle number to have over five hundred divisors?

약수의 개수가 500개 이상인 최초의 정수는 무엇인지 구하는 문제.



728x90

'공부 > 문제풀기' 카테고리의 다른 글

프로젝트 오일러 문제 14  (0) 2019.01.05
프로젝트 오일러 문제 13  (0) 2018.12.23
프로젝트 오일러 문제 11  (0) 2018.11.18
프로젝트 오일러 문제 10  (0) 2018.11.12
프로젝트 오일러 문제 9  (0) 2018.11.12
Posted by 아야카
2018. 11. 18. 23:14
728x90

Largest product in a grid

Problem 11

In the 20×20 grid below, four numbers along a diagonal line have been marked in red.

08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91
22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80
24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50
32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70
67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21
24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72
21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95
78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92
16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57
86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58
19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40
04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66
88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69
04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36
20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16
20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54
01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48

The product of these numbers is 26 × 63 × 78 × 14 = 1788696.

What is the greatest product of four adjacent numbers in the same direction (up, down, left, right, or diagonally) in the 20×20 grid?

20x20 격자 속에서 한 방향으로 4개 연속 이어진 수의 곱이 가장 큰 수는 무엇인가.

8방향 탐색에 대해 묻는 문제다. 다만 곱셈을 구하는 문제이므로 4방향만 탐색해도 된다. 또, 연속된 4개의 수가 필요하므로 탐색범위는 0~19가 아닌 0~16으로 조정된다.


728x90

'공부 > 문제풀기' 카테고리의 다른 글

프로젝트 오일러 문제 13  (0) 2018.12.23
프로젝트 오일러 문제 12  (0) 2018.11.24
프로젝트 오일러 문제 10  (0) 2018.11.12
프로젝트 오일러 문제 9  (0) 2018.11.12
프로젝트 오일러 문제 8  (0) 2018.11.11
Posted by 아야카
2018. 11. 12. 00:08
728x90

Summation of primes

Problem 10

The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.

Find the sum of all the primes below two million.

에라토스테네스의 체를 이용한 소거법으로 합성수를 제거 후 합산하는 방법을 사용한다. 



728x90

'공부 > 문제풀기' 카테고리의 다른 글

프로젝트 오일러 문제 12  (0) 2018.11.24
프로젝트 오일러 문제 11  (0) 2018.11.18
프로젝트 오일러 문제 9  (0) 2018.11.12
프로젝트 오일러 문제 8  (0) 2018.11.11
프로젝트 오일러 문제 7  (0) 2018.11.11
Posted by 아야카