hunsoo911   4년 전

군대에서 처음 코드를 짜다보니 디버깅을 할 수 없었습니다. 그래서 출력을 통해 값을 확인했습니다.

그런데 출력만 했는데 계속 값이 바뀌는 겁니다. 그래서 출력에 변수를 넣으면 값이 초기화되나?

이런 생각을 했는데 "cout << "";"으로 넣어 보았습니다.

ex)

cout << ""을 넣지 알았을 때 출력 : 5

cout << ""을 넣었을 때 출력 : 0

이렇게 나와 왜 결과 값이 바뀌는지 이해할 수 없었습니다.

고수분들이 답변해주시면 감사하겠습니다.

seico75   4년 전

int team[2]; // 0번팀과 1번 팀이있음.

로 team 의 인자는 0, 1 이 가능하나

team[1] = 0; team[2] = 0;

이나

check[count]=2; check[count]=1;

과 같이.. (check 값이 team의 인자로 쓰이니까..)

1, 2 로 인덱싱 합니다.

즉, team 배열 뒤의 할당되지 않는 메모리를 사용하기 때문에 경우에 따라서 다른 값이 나옵니다.

이와 같이 상관없어 보이는 코드를 넣고 빼고에 따라서 결과가 달라지면 메모리를 잘못 건드리는 것을 의심해봐야합니다.

hunsoo911   4년 전

메모리 누구가 맞는 것으로 확인되었습니다. 답변 감사합니다.

추가적으로 웹 컴파일러로 메모리 디버깅할 수 있습니까?

#include <crtdbg.h> 먹질 않습니다 ㅠㅠ

지금 사용하는 웹 컴파일러는 ideone.com [c++14]사용하고 있습니다.

seico75   4년 전

일단 crtdbg 는 visual studio 계열의 툴이어서 gcc/clang 계열인 ideone 에서는 안먹는 것으로 알고 있습니다.

그리고 이 문제는 누수가 아니라 corruption 입니다. 제가 알기로는 crtdbg 는 alloc, free 쌍 확인으로 알고 있어서...

corruption 검출 툴들도 있지만.. ideone 에서 쓰기는 여전히 쉽지 않을 겁니다.

댓글을 작성하려면 로그인해야 합니다.