2016-07-14 3 views
0

저는 MS Visual Studio 2010을 사용하여 C++로 게임을 작성하고 있습니다.이 게임은 베타 상태에 있지만 거의 심각한 문제에 직면하고 있습니다. 누군가가 도움을 줄 수 있습니다.C++ 응용 프로그램이 코드와 다르게 동작합니다.

그래서 VS에서 게임을 실행하면 (예 : F5 키 사용) 모든 것이 작동합니다. 그러나 게임의 일부 지점에서 동일한 게임의 새로 컴파일 된 .exe 파일을 실행하자마자 충돌이 발생하고 다른 이상한 일이 발생합니다. 문제를 해결하기 위해 할 수있는 일이 있습니까? VS에 특정 설정이 있습니까? 정말 혼란 스럽습니다. 누군가 해결책을 안다면 도움을주십시오.

+0

MSVC에서 실행 파일을 디버그 모드로 실행하고 있습니까? –

+0

사용하는 모든 상대 경로는 대기중인 버그입니다. 그것들을 고치면, 당신은 훨씬 더 가까이에, 어, pre-alpha와 같은 소리가납니다. – IInspectable

+0

F5 대신 cltr + F5를 시도하십시오 (예 : 실행 대신 실행). 참조 : [link] (http://stackoverflow.com/questions/11202088/what-is-different-between-visual-studio-f5-ctrlf5-or-running-outside-of-visua) – Rotem

답변

3

F5 키가 디버깅을 시작하는 데 사용되고 디버거에서 실행될 때 Visual Studio는 디버거에서 실행되지 않을 때 발생하지 않는 작업을 수행합니다.

먼저 디버거가 모든 메모리를 지우므로 초기화되지 않은 변수가 0이됩니다. 이 지우기는 널 포인터로 초기화되는 초기화되지 않은 포인터 변수를 포함합니다. 당신은 포인터 변수를 초기화되지 않은 그들을 위해 널 포인터 검사를 한 경우 디버거에서 실행하는 경우

, 그 수표는 잘 작동하지만, 디버거에서 실행하지 않을 때 그 변수는 값을 확정 값을 가질 것 겉보기에는 무작위이고 널 포인터가 아닐 가능성이 큽니다. 따라서 디버거 외부에서 실행할 때 null이 아닌 포인터는 프로그램이 포인터를 유효하다고 생각하게하고 으로 정의 된 동작으로 이어질 포인터를 참조 취소합니다.

당신이해야 할 일은 코드를 살펴보고 초기화되지 않은 변수, 특히 포인터를 찾아 사용하기 전에 제대로 초기화되었는지 확인하는 것입니다.

다른 언급처럼

, Visual Studio 디버거와 다른 환경에서 또는 Visual Studio에서 프로그램을 시작하여 실행할 때 잘못 될 수있는 많은 다른 일들도 있습니다. 언급 된 한 가지 주요한 문제는 상대 파일 경로가 더 이상 올바르지 않을 수 있다는 것입니다. 다른 디렉토리에있는 명령 행에서 실행할 때나 프로그램 아이콘을 두 번 클릭하여 실행하는 경우 프로그램 작업 디렉토리는 Visual Studio에서 시작했을 때와 다릅니다. 게임 자산 및 기타 필요한 파일의 기본 디렉토리와 같은 것을 설명하는 일종의 구성 값을 갖는 것이 좋습니다. 그런 다음 프로세스의 현재 작업 디렉토리를이 디렉토리로 변경하거나이를 사용하여 자산의 절대 경로를 직접 확인할 수 있습니다.

+0

대단히 감사합니다. 그런 것들에 대한 모든 코드를 검토 할 것입니다. 사실 저는 항상 변수를 초기화하려고 시도하지만, 내가 조사해야 할 부분이있을 것입니다. – Andy8888

+0

@ Andy8888 이것이 문제를 해결 한 경우 대답을 수락하십시오. –

+0

필자의 주요한 문제는 포인터가 잘못된 것이라고 생각합니다. 많은 일이 메모리 내부에서 일어나는지도를로드하거나 언로드하는 중에 최악의 일이 발생하기 때문입니다 (예 : 많은 새롭고 삭제 된 호출). 나는해야 할 일이 많다고 생각합니다 : / – Andy8888

관련 문제