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

C/C++ Q/A
[727] Re:포인터에 대해 잘 아시는분 답변좀해주세요..제가 알고 있는 것의 문제점도 지적해주세요..(참고로 컴
꼴(이성렬) [kkol] 1786 읽음    2002-06-09 19:57
안녕하세요. 대의님..
포인터에 대한 개념을 잘 못 잡으신거 같군요.

이번기회에 시간이 많이 걸리더라도 포인터 확실히 알고 넘어가길 바라면서
부족하나마 설명을 해보겠습니다.

대의님이 잘 못한것은 포인터에 주소를 할당 안한것이 아니라
포인터에 할당된 메모리를 벗어난 주소를 건드렸다는 겁니다.

분명히 여기서  in에 inp의 주소를 넣어준것은 맞지만
: int *in = &inp;
inp는 단지 정수형으로 4바이트의 메모리만 할당된 영역입니다.
그러니까 inp이 저정되 있는 주소가 님의 말대로 1000이라면 1000부터 1003까지의 주소만 확보된것이란
말이죠.

그 이상되는 1004,1008 이런 주소는 님이 맘대로 쓸 수 공간이 절대!! 아닙니다.
(메모리 할당이 안됐으니까요..)
프로그램의 다른 코드 혹은 다른 데이터들이 점유 하고 있을 가능성 큽니다.
물론 어떤 가능성도 장담 할 수 없는것이죠.
그래서 아래 어떤분이 제대로 돌아간다고 하시는데..
우연히 제대로 돌아갈 수 도 있습니다.
대부분은 프로그램이 다운되 버리고요.

즉.. 님은 할당된 주소가 아닌 곳에 마구 데이터를 써 넣으셨으니.
그 다음에 일어날 일은 알수가 없는 것이죠..

포인터를 쓰실때 이것만 확실히 하십시오.

포인터에는 반드시 필요한 만큼을 메모리를 할당 한 뒤 사용하라!!!!
포인터는 단지 포인팅 하기위한 것이지 메모리 할당까지 되는것은 아니라는겁니다.

님은 4바이트만 메모리에 확보된 포인터에 20바이트를 쓰려고 했으니 잘못이죠.
절대!! 이런식으로 사용하지 마세요. ( 아주 중요합니다. )





김대의 님이 쓰신 글 :
: 우선 제가 배운걸 애기 하자면...
: 예를 들어 아래 프로그램을 보겠습니다.
: 제가 배운거는 아래처럼 포인터를 초기화 하면 포인터 in의 주소는 inp가 정수형이므로4byte씩 증가 합니다.즉 in의 주소가 1000이라면 in+1은 1004, in+2는 1008,in+3은 1012..로 4씩 증가하는걸로 압니다.
:
: 본론으로 들어가서............
: 아래 소스를 컴파일 시키면 이상한 16진수가 나오면서 에러 메세지가 뜨는데 왜 그런건가요.??
: 참고로 이런 메세지가뜨네요..
: thread stopped...... fault access violation at 0x406ec2:read of address 0x5
:
: 어쩔때는 컴이 아애 맛이 가버려요..ㅡㅡ  보통 이런 경우는 포인터에 주소를 지정안했을때 생기는 현상으로 알고있는데 전 분명히 위에서 처럼 포인터 초기화를 했는데...
: 이상한건 아래에서 프로그램처럼 in의 i번째에 입력과 출력을을 안하고,
: in에만 입력하고 출력을 하면 에러가 않뜨네요..ㅡㅡ;
:
: #include <stdio.h>
: #include <conio.h>
:
: void main(void)
: {
: int inp, i = 0;
: clrscr();
: for(i=0;i<5;++i){
: scanf("%d",(in+i) ); printf("\n : %d", *(in+i)); }
: getch();
: }
:
: 제가 잘못알고 있는 포인터 지식이 있다면 알려주십시요. 그리고 위 프로그램이 에러나는 원인좀 알려주세요..
:

+ -

관련 글 리스트
714 포인터에 대해 잘 아시는분 답변좀해주세요..제가 알고 있는 것의 문제점도 지적해주세요..(참고로 컴파일 김대의 1770 2002/06/08
732     Re:포인터에 대해 잘 아시는분 답변좀해주세요..제가 알고 있는 것의 문제점도 지적해주세요..(참고로 컴 오전&오후 1795 2002/06/10
727     Re:포인터에 대해 잘 아시는분 답변좀해주세요..제가 알고 있는 것의 문제점도 지적해주세요..(참고로 컴 꼴(이성렬) 1786 2002/06/09
718     Re:포인터에 대해 잘 아시는분 답변좀해주세요..제가 알고 있는 것의 문제점도 지적해주세요..(참고로 컴 남병철.레조 1830 2002/06/09
720         Re:Re:포인터에 대해 잘 아시는분 답변좀해주세요..제가 알고 있는 것의 문제점도 지적해주세요..(참고 김대의 1806 2002/06/09
721             Re:Re:Re:포인터에 대해 잘 아시는분 답변좀해주세요..제가 알고 있는 것의 문제점도 지적해주세요..( 남병철.레조 1868 2002/06/09
715     어디서 돌렸나요? 모라 1774 2002/06/09
728         Re:어디서 돌렸나요? 꼴(이성렬) 1828 2002/06/09
746             Re:Re:어디서 돌렸나요? ¸ð¶ó 1837 2002/06/13
717         Re:어디서 돌렸나요? (컴파일러 환경은 bc5.01입니다.), 도스용 tc에서는 오류가 없을거에요.^^ 김대의 1793 2002/06/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.