2015-01-15 2 views
-1

동적 메모리 할당에 대한 읽기가 시작되어 프로그램이 충돌합니다.프로그램 충돌 (동적 메모리 할당)

void getSpace(int *ptr) 
{ 
    ptr = new int [100]; 
} 

void getData(int *ptr) 
{ 
    cin >> *(ptr); 
    cin >>*(ptr+1); 
} 
int main() 
{ 
    int *ptr = NULL; 
    getSpace(ptr); 
    getData(ptr); 
} 

하지만 어떤 이유로이 메시지는 표시되지 않습니다. 마치 내가 원하는 힙 크기로 배열을 가져 오는 것과 같은 함수에서 포인터를 선언하면 충돌이 발생하지 않는 것 같습니다.

+2

힌트를해야 하나 : ptr'는'getData' – Mgetz

+1

'에서 nullptr'입니다'어쩌면 당신이해야 당신이 메모리를 일으킬 수 있기 때문에 함께 할이 –

+0

누수 후 새로 할당 된 PTR 삭제 'ptr' 포인터는'getSpace()'에 [참조로 전달]해야합니다. (http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/). 'getSpace (int ** ptr) '와 같은 것입니다. – francis

답변

2

int* ptr 포인터의 로컬 복사본이고, 당신은 ptr 변수에 할당 :

void getSpace(int **ptr) 
{ 
    *ptr = new int [100]; 
} 

및 호출 ,하지만 getScope에 국한되어 있으므로 main 함수는 할당을 볼 수 없습니다. 당신은 int** ptr을하고 *ptr = new int[100]; 또는 int*& ptr 다음 ptr = new int[100];

+0

있습니다. 나는 포인터가 ptr의 주소를 가리키고 있다고 생각했기 때문에 포인터를위한 메모리를 할당하면 ptr을위한 메모리도 자동으로 할당된다. –

+0

포인터에 대한 메모리를 할당하는 것이 아니라 포인터를 값으로 getSpace()에 전달하고 있습니다. – drescherjm

+0

@drescherjm 감사합니다. 더 많은 것을 알려 드리겠습니다. – Creris

0

변경에 : 당신은 단지 getSpace의 범위 내에서 메모리를 할당 할 수 있도록,

getSpace(&ptr);