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
[47788] Re:초보질문요.. 배열 포인트를 함수인자로 넘겼는데 에러발생하네요??
김시환 [godson2] 1181 읽음    2007-01-17 17:28
멋진남자 님이 쓰신 글 :
: 배열 포인트를 함수인자로 넘겼는데 에러발생하네요??
:
: 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 초보질문요.. 배열 포인트를 함수인자로 넘겼는데 에러발생하네요?? 멋진남자 850 2007/01/17
47788     Re:초보질문요.. 배열 포인트를 함수인자로 넘겼는데 에러발생하네요?? 김시환 1181 2007/01/17
47794         Re:Re:초보질문요.. 배열 포인트를 함수인자로 넘겼는데 에러발생하네요?? 공부맨 926 2007/01/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.