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
[19188] Re:Re:케게겍! 님이야말로 잘못 알고 계시네요!
김백일 [cedar] 963 읽음    2002-06-08 19:46
김대의 님이 쓰신 글 :
: 배열을 사용해서 할려는게 아닌데요..ㅡㅡ;
:
: 포인터를 사용해서 배열처럼 사용하는건데..
:
: 그리고 포인터는 배열처럼 공간을 미리 할당안해되되는 장점이 있는걸루 아는데요..ㅡㅡ;

포인터는 미리 할당한 공간의 주소에만 의미가 있습니다.
프로그램에서 미리 할당하지 않은 공간의 주소를 액세스하면 절대로 안됩니다!
포인터에 대한 초보들의 흔한 실수죠. 주의하세요.

프로그램이 오동작을 하거나 이유없이 죽어버리는 경우 중에 제일 흔한 경우가 이런 경우입니다.
포인터가 할당한 공간외에 엉뚱한 주소를 액세스하는가를 항상 의심해야 합니다.
그래서, 이런 디버깅을 도와주는 전문 프로그램인
Bounds Checker나 Code Guard(C++Builder에 포함되어 있습니다.)와 같은 프로그램은
그래서 있는 겁니다.


: 먼자 잘못아신거 같네요..ㅡㅡ;
:
: : :
: : : #include <stdio.h>
: : : #include <conio.h>
: : :
: : : void main(void)
: : : {
: : : int inp, i = 0;
: :   int inp[5], i; // 배열로 선언해서 미리 필요한 공간을 할당해야 합니다.

정적으로 배열을 선언할 수 없는 경우는
malloc()함수나 new 연산자를 사용하여 동적으로 할당하면 됩니다.

      int *in = (int*)malloc(5 * sizeof(int)); // C 방식
      int *in = new int[5];                    // C++ 방식

: : 그렇지 않으면 엉뚱한 메모리에 데이터를 쓰게 되므로 이상한 값이 출력되거나,
: : 프로그램이나 시스템을 다운시킬 수 있습니다!
: :
: : : // int *in = &inp; 이 부분은 삭제하세요.
: : : clrscr();
: : : for(i=0;i<5;++i){
: : : scanf("%d",(in+i) ); printf("\n : %d", *(in+i)); }
여기서 물론
      scanf("%d", &in[i] ); printf("\n : %d", in[i]));
으로 써도 되는 건 아실테죠?

그리고 malloc()이나 new로 할당한 메모리는,
포인터 in을 사용한 블럭이 끝나기 전에
free() 함수나 delete 연산자를 써서
할당한 메모리를 해제해야 합니다.
(가능하면 더 이상 사용할 필요가 없을 때 바로 해제하세요.)

여기서 주의할 것은,
malloc()으로 할당한 메모리는 free()로,
new로 할당한 메모리는 delete로 해제해야 합니다.
틀리게 하면 안됩니다!

      free(in);    // C 방식
      delete[] in; // C++ 방식

: : : getch();
: : : }
: :
: : 앞으로 이런 종류의 질문은
: : Turbo C/Borland C++ Q/A에 해주세요!

+ -

관련 글 리스트
19182 이 소스를 실행시키면 에러메세지가 뜨는데 왜 그런건지좀... 김대의 802 2002/06/08
30094     Re:이 소스를 실행시키면 에러메세지가 뜨는데 왜 그런건지좀... 유승철 888 2002/06/08
19192     Re:이 소스를 실행시키면 에러메세지가 뜨는데 왜 그런건지좀... 모라 774 2002/06/08
19195         Re:Re:헐..님글 보고 이제 알았네요..ㅜㅜ 지성합니다. 전 c++빌더인지 몰랐어요..c++에 다시올릴께요.. 김대의 803 2002/06/08
19184     배열 선언을 빼먹으셨네요. 김백일 823 2002/06/08
19185         Re:배열 선언을 빼먹으셨네요...-> 켁 ..이거 포인터로 사용하는건데요..ㅡㅡ; ... 김대의 836 2002/06/08
19188             Re:Re:케게겍! 님이야말로 잘못 알고 계시네요! 김백일 963 2002/06/08
19190                 Re:Re:Re:아 그리고 그 디버깅 전문 프로그램 사용법좀..아참 그리고 볼랜드c++이란 볼랜드 시빌더랑 다 김대의 847 2002/06/08
19189                 Re:Re:Re:제가 배운봐로는 제가 한프로그램은 주소할당이 되었는데요..ㅡㅡ; 김대의 811 2002/06/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.