MFC시리얼통신 포인터 질문
글쓴이: momark / 작성시간: 화, 2014/08/12 - 10:32오전
제가 시리얼통신을 공부하고있는데 포트와 보레이트를 입력하는 구간을 다른 새창의 다이얼로그에 두고 작업을 했습니다. 다름이 아니라 CmdTaget을 상속받은 comm이라는 클래스를 새창 다이얼로그에 포인터로 넣었는데요 새창에서는 포인터에 입력한 변수들이 다 잘 들어가있고 작동도 잘됩니다. 근데 메인 다이얼로그에 똑같이 comm을 포인터로 추가하고 send를 보내려고 포인터를 사용하면 변수에 식을계산할수없다 또는 쓰레기값이 들어가있는데 제가 새창과 메인창이 CDialogEx를 상속받고있는데 같은 상속을 받고있으면 포인터를 양쪽에 못쓰나요? 아니라면 문제를 잘 모르겠네요;; 도와주세요
Forums:
대강 보아하니.
일단 (관리만 잘 되면) 포인터를 양쪽에서 못 쓸 이유는 없으니 그건 넘어가고,
대충 두 가지 정도가 떠오르네요.
- 두 개의 다이얼로그에서 받은 comm 클래스 포인터가 서로 다른것이다.
- 또는, 동일한 포인터를 넘겨주긴 했는데 먼저 받은 놈이 그걸 사용한 후 메모리를 해제해 버렸다.
디버거를 사용하면 쉽게 찾아낼 수 있습니다. 넘겨받은 포인터값, 생성자, 소멸자 등에 브레이크 포인트를 걸고 테스트해 보세요.
--
1번에 대해
양쪽 클래스 헤더에 각각 CComm* m_com;을 써줬는데 서로 다르다고 성립이 되나요?
메모리를해제하는 부분은 없는것 같은데
디버거로 확인을 해보셔야 합니다.
포인터에 선언한것만 가지고는 해당 포인터에 뭐가 들어갈지 알 수 없으니 직접 그 순간을 봐야 한다는 겁니다.
메모리를 해제하는 것도 마찬가지죠. 소멸자에 브레이크 포인트를 걸어보면 알 수 있습니다.
기타 여러 가지 이유로 포인터 변수 자체가 변경되거나 사용하던 메모리 영역이 해제되거나 침범받을 수 있습니다.
눈으로 확인하는 디버깅도 중요하지만 라이브 디버깅도 중요합니다.
어차피 소스코드를 올려주신 것도 아니니 제가 제시한 것들도 그저 후보들일 뿐입니다. 확실히 알려면 라이브 디버깅을 해봐야죠.
--
감사합니다
포인터로 다시 불러서 변수를 같게 하니까 되네요 덕분에 해결했습니다.
댓글 달기