2013-04-25 3 views
1

calloc 배열에 대한 포인터를 가리 키려고합니다. 어떤 이유로, 두 번째 요소에 도달하면 프로그램 강제 종료됩니다. 첫 번째 요소가 인쇄되어 제대로 작동합니다.C : calloc 배열을 가리키는 방법?

integerArray = (int*)calloc(totalNum, sizeof(int)); 

if(integerArray == NULL) 
{ 
    printf("ERROR! Number entered is invalid."); 
    exit(1); 
} 

collectNumbers(totalNum, integerArray); 

arrayAscending = &integerArray; 
arrayDescending = &integerArray; 

for(i = 0; i < totalNum; i++) 
{ 
    printf("%3d", **(arrayAscending + i)); 
} 
+0

내가 앞으로 C. – dsta

+0

그냥 평범한 사용하고 있습니다를 보여주십시오 변수 선언. 아마도 당신은 int * integerArray;와 int ** arrayAscending;과 int ** arrayDescending;과 (int i;','int totalNum;')을 가질 것입니다. –

답변

3

문제는 여기에 있습니다 : : 당신은 포인터에 대한 포인터를 증가하는

printf("%3d", **(arrayAscending + i)); 

여기에 단지 두 번째 포인터를 통해 모든 요소를 ​​인쇄하려고 내 코드의 예입니다.

내가 여기에있는 코드에 따라

, 다음 있어야 :

printf("%3d", *((*arrayAscending) + i))); 

모두의 먼저해야 만이 증가 후 포인터 integerArray 값을 얻기 위해 arrayAscending 역 참조 색인 생성을 사용하지 않으려는 경우

다음과 같이도 쓸 수

:

printf("%3d",(*ayyarAscending)[i]); 

을하지만 실제로는 더 간단 그냥 인덱싱 사용 :

printf("%3d", integerArray[i]); 
+0

어떻게 고칠 수 있습니까? – dsta

+0

'(* ayyarAscending) [i]'도 가능할 수 있습니다. –

+0

@Koushik는 – Alex

1
arrayAscending = &integerArray; // these point to the int*, they don't get the value... 
arrayDescending = &integerArray; 

for(i = 0; i < totalNum; i++) 
{ 
    printf("%3d", integerArray[i]); // FIXED 
} 
+0

감사합니다, 내 아이폰에 좋은 대답을 입력해야 할 것 ... –