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
[47794] Re:Re:초보질문요.. 배열 포인트를 함수인자로 넘겼는데 에러발생하네요??
공부맨 [] 925 읽음    2007-01-18 10:03
시환님이 설명해주신거에 덧붙여서 멋진남자님의 코드를 최대한 덜 수정하도록 한다면..
원래 코드에 void CreateA(int *a) 함수를  void CreateA(int *&a) 로 변경하셔도 동작됩니다.
'&'참조변수를 사용했을때와 그냥 했을때의 차이를 생각해보시면 왜 오류가 났었는지 금방 알아차리실겁니다.


김시환 님이 쓰신 글 :
: 멋진남자 님이 쓰신 글 :
: : 배열 포인트를 함수인자로 넘겼는데 에러발생하네요??
: :
: : void CreateA(int *a)
: : {
: :     a = new int[10];
: :     for(int i=0; i<10; ++i){
: :         a[i] = i;
: :     }
: : }
: :
: : void main()
: : {
: :     int *m_a;
: :
: :     CreateA(m_a);
: :
: :     for(int i=0; i<10; ++i){
: :         cout<<m_a[i]<<" ";                    <<============= 에러발생
: :     }
: : }
: :
: : 제가 뭘 잘 못 이해하고 코딩한건 가요??
: :
: : 에러 좀 잡아주세요. 부탁드립니다.
:
:
:
: int * a                  <----  이 상태에서는 a 라는 포인터 변수의 실제 어드레스가 잡히지 않습니다.
: a = new int[10]    <---   이렇게 객체를 생성해 주어야 비로소 어드레스 할당이 되는 것입니다.
:
: 따라서 Main에서 설정한 m_a 변수는 실제 어드레스가 할당이 되지 않은 상태에서 서브함수의 파라메타로 넘어가기
: 때문에 서브함수의 파라메타에서 할당된 실제 어드레스가 메인함수의 변수로 적용이 되지 않는 것입니다.
:
: 아래처럼 실제 할당된 어드레스를 함수의 리턴으로 주어서 그것을 다시 받아서 사용하면 됩니다.
:
: int* CreateA()
: {
:     int *a ;
:     a = new int[10];
:
:     for(int i=0; i<10; ++i)
:     {
:         a[i] = i;
:     }
:     return a ;
: }
:
: int main(int argc, char* argv[])
: {
:     int *m_a ;
:     m_a = CreateA();
:
:
:     for(int i=0; i<10; i++)
:     {
:         cout << m_a[i] << " ";
:     }
: }

+ -

관련 글 리스트
47784 초보질문요.. 배열 포인트를 함수인자로 넘겼는데 에러발생하네요?? 멋진남자 849 2007/01/17
47788     Re:초보질문요.. 배열 포인트를 함수인자로 넘겼는데 에러발생하네요?? 김시환 1181 2007/01/17
47794         Re:Re:초보질문요.. 배열 포인트를 함수인자로 넘겼는데 에러발생하네요?? 공부맨 925 2007/01/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.