C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[68730] Re:[질문] Access Violation in CC3290MT.DLL
Starlet [starlet5] 1985 읽음    2012-12-03 14:32
CC3290MT.DLL에서 Access Violation이 나는 경우는 다음처럼,

double d;

String().sprintf(L"%d %s", d, "abc");

sprintf에 입력되는 인자들인 d나 "abc"나 포인터 문제 없이 제대로 입력되었죠. 그러나 d가 double형으로 8 bytes인데 printf안에서는 %d로 int형 4byte만 가져오게 됩니다. 뒤에 따라오는 %s는 d의 남은 4 bytes를 주소로 인식하게 되서 엉뚱한 곳을 참조하게 됩니다. 이때 sprintf 내부에서 Access Violation이 발생하게 되므로 sprintf가 있는 CC3290MT.DLL가 Access Violation을 내게 됩니다.
그런데 만약, sprintf에 testclass->name와 같이 인자를 주는데, testclass가 NULL일 경우와 같이 포인터 오류가 있을때에는 현재 Unit 에서 Access Vaiolation이 납니다.

이런 경우처럼 Builder가 제공하는 함수 내에서 Access Violation이 날 수 있는 경우를 살펴보시기 바랍니다.

막연하기도 한데, 조금이나마 도움이 되길 바라며 글 남깁니다.


땅주인 님이 쓰신 글 :
: 환경: C++ Builder 2009
: Socket : TServerSocket, TClientSocket 사용 ( Indy Socket 아님 )
:
: 단말기와 Wifi로 연결하여 Socket으로 데이터를 주고 받는 프로그램인데요..
: 데이터 송/수신 시 뜬금없이 이런 에러가 나옵니다.
:
: 포인터를 잘못 써서 그럴까요?
:
: 어지간한 코드에서는 Try ~ Catch로 잡아서 Exception 처리를 했고,
:
: Socket에서 받은 데이터는 DTO(Data Trasfer Object)형태로 Class 화 해서
: 계속 동적으로 할당하고 사용하면 delete하는 형태로 사용합니다.
:
: 구대리한테 물어봐도 ..
: 잘 찾아지지 않고.. 알려진 버그인 지.. 갈피를 못 찾아서..
:
: 고수님들의 도움을 ...
:
: 감사합니다.

+ -

관련 글 리스트
68721 [질문] Access Violation in CC3290MT.DLL 땅주인 1875 2012/11/30
68730     Re:[질문] Access Violation in CC3290MT.DLL Starlet 1985 2012/12/03
68797         감사합니다. 땅주인 1495 2012/12/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.