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
[40297] Re:[질문] 변수의 값이 자꾸 이상한 값으로 바뀝니다....
[] 1057 읽음    2005-05-25 03:07
스택이 망가지는군요.
dll이 로드되면 자신을 로드한 프로세스와 동일한 주소공간을 사용하게 되지요.
DLL에 위치한 함수를 호출할 때 그 함수를 위한 스택공간과 호출한 함수가 사용하는 스택공간은 바로 이어져 있지요.
이 문제는 아마도 DLL 내의 함수 매개변수(인자) 전달에 문제가 있지 않나 싶습니다.
호출하는쪽에서는 8바이트를 보냈는데 피호출함수에서는 12바이트로 알고 사용하다 어느 시점에 그 곳에 write하게 되면 호출하는쪽이 사용하는 스택영역이 망가지겠죠.  DLL 헤더 파일과 소스 파일을 한 번 유심히 살펴보아야 겠습니다.

다꾸엔젤 님이 쓰신 글 :
: 안녕하세요....
:
: 프로그래밍을 하다가 이상한 현상이 발생되어 문의 드립니다.
:
: 프로그램은 다음과 같습니다.
:
: int a=0;
:
: for(a= 0; a< 60; a++){
:     b[a] = c(a+1,1);                 <-- 여기가 문제가 있는 구문입니다.
: }
:
: 이런식으로 되어 있는 프로그램입니다.
:
: 여기서 int a는 지역변수이며 b[]는 클래스에서 사용하는 전역변수 입니다.
:
: 또한 c() 함수는 DLL을 임포트 해 오는 함수라고 보면 됩니다.
:
: 여기서 한가지 이상한 일은 어느정도 루프를 돌다가 이상한 값으로 변해버린다는 것입니다.
:
: Access Violation 에러가 발생되어서 디버깅을 해본 결과 a값이 0,1,2,3,4, .. 이런식으로 차례로 들어가다가
:
: 갑자기 42342 와 같은 숫자값이 들어간다는 것입니다.
:
: 물론 함수뿐만 아니고 클래스내에 a라는 변수는 존재하지 않습니다.
:
: 그래서 c(a+1,1) 함수를 제외하고 실행시키니 문제가 없더군요..
:
: c(a+1,1) 함수에 의해서 변수 a값이 왜 변하는지 알고 싶습니다.
:
: 혹시라도 이러한 경우를 당하신(?) 분이 계시다면 많은 조언 부탁드립니다.
:
: 관계는 없겠지만 c(a+1,1) 함수에도 a라는 변수는 존재하지 않습니다.

+ -

관련 글 리스트
40277 [질문] 변수의 값이 자꾸 이상한 값으로 바뀝니다.... 다꾸엔젤 1132 2005/05/24
40297     Re:[질문] 변수의 값이 자꾸 이상한 값으로 바뀝니다.... 1057 2005/05/25
40284     Re:[질문] 변수의 값이 자꾸 이상한 값으로 바뀝니다.... 땅주인 847 2005/05/24
40282     Re:[질문] 변수의 값이 자꾸 이상한 값으로 바뀝니다.... 착한아들 818 2005/05/24
40278     Re:[질문] 변수의 값이 자꾸 이상한 값으로 바뀝니다.... 수야!╋ 763 2005/05/24
40280         Re:Re:[질문] 변수의 값이 자꾸 이상한 값으로 바뀝니다.... 843 2005/05/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.