|
멋진남자 님이 쓰신 글 :
: 배열 포인트를 함수인자로 넘겼는데 에러발생하네요??
:
: 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] << " ";
}
}
|