안녕하세요...
간단하게 도스 게임 만들고 있는 입문 프로그래머입니다.
이틀 전부터 메모리 관련해서 오류가 나...
정말 머리 싸매고 디버깅을 해보고 검색을 해보고.... while(1); 했지만...
잡지 못하여 여쭤보려 글을 올립니다 ㅠ_ㅜ
메뉴입니다.
위에 주석과 같이 newFile_Hero(); & LoadFile_Hero();에서 Heap 관련 오류 (제 생각엔!)가 납니다.
일단 저 함수에 들어가면
여기로 들어옵니다....
제가 assert로 어디서 오류가 나는지 확인해본 결과
충격적이게도 ofstream의 선언 구문에서 가끔 발견됩니다. 가끔이란 것은 실행 될 경우도 있고 안되는 경우도 있다는 뜻입니다...
(여기서 점유 중인 메모리 영역을 침범한 오류일 가능성이 높다고 판단했습니다!)
그런데 방금 호출 스택에서는 return에서 들어갔다고 나오네요...
마지막에 멈추는 코드는(어셈블리 제외) free.c라고 합니다...
후...
그래서 동적 할당과 관련된 모든 짓을 다해봤습니다.
댕글링 포인터도 처리해보고
인터넷에서 똑같은 오류가 있으신 분은 delete를 두 번 하셨다고 해서 delete구문을 아예 지워보기도 했고...
그러나 오류는 똑같이 발생하네요... 하...
[가장 마지막에 멈추는 free.c 코드 부분 발췌]
그런데 가장 충격적인 것은 디버깅 (f5)에서는 아무런 문제가 없다는 겁니다...
제발 ㅠㅠ... 도움 좀 부탁 드릴께요...
문제를 해결하기 위해서 주어진 코드가 부족하시면 댓글로 말씀해주시면 감사하겠습니다....
부탁드립니다 ㅠ-ㅠ
//////////////////////////////////////////////////////////////////////////////////////////////////////// add 13:11
아까와는 다른 호출 스택.... ㅠ
궁금한게 또 있습니다. build시 오류가 나는데 debug시 문제가 없으면 release시 문제가 없는 것과 같으므로... 그냥 짜면.......
분명 문제가 있겠죠 -.-...?
ㅎ히힣힝이히히ㅣㅎㅎㅎ히힣ㅇㄴㅇㄴ힣ㄴㅎ
버그 설명하는거만 봐도 수준을 안다더니... 에러난 위치와 에러 메시지가 무엇인가는 확실히 해야하지 않것니? assert는 도대체 왜쓰는거냐? debug에서 오류가 안나면 된거지. release모드로 설정해놓고 디버그질 하고 있는건 아니겠지?
debug에서 temp memory 때문에 오류가 안나는데 build하면 오류나요... release모드는 그냥 시도 차원에서 해본거구요...
assert는 디버깅에서 에러를 못잡으니깐... 어디서 에러 나는지 찾을려구요...
디버그에선 문제가 없는데 빌드해서 실행하면 문제가 있다면 뭔가 권한 문제가 아닐까염? 아웃풋파일스트림 초기화를 open으로 하지 말고 바로 해보는건 어떨까요? cHero 초기화 부분과 ofstream open 순서를 바꿔서 시도해 보셨나요? 사실 저는 뭐가 에런지도 잘 모르겠네요. 에러 나온걸 제대로 보여주시는게 어떨까요?
D HERO 어쩌고의 값이 정확이 어떻게 되는지도 궁금하네요
ofstream outFile("test.dat",ios::out); 이런식으로 위에 옵션을 줘보는건 어떨까요? 파일이 없을때 못만들고 에러가 나는거 같은데 아닐까요?
존나 자바만 해서 사실 하나도 모르겠네요 시발
처음 빌드를 하면 파일이 없어서 안되다가 디버그를 하면 파일이 만들어져서 되는게 아닐가 싶습니다. 저의 추측이 어떤가요?