2012-04-07 5 views
1

포인터로 가리키는 메모리 내용 블록을 표시하는 함수를 사용합니다. 하지만 원하는 출력을 얻지 못했습니다, 나는 이것에 새로운 오전, 제발 내가 잘못하면 수정하십시오. 크기 = 3, 요소 = 1,2,3을 입력하면 출력 = 1 만 출력됩니다.함수에서 포인터 포인터를 사용하는 올바른 방법은 무엇입니까?

여기에 코드입니다 :

#include <stdio.h> 
#include <stdlib.h> 

void merge(int **arr1); 

int main(void) { 
    int size1; 
    printf("Give me the size of first array\n"); 
    scanf("%d", &size1); 

    int *arr1 = malloc(size1*sizeof(int)); 
    int *p1=arr1; 
    printf("Give me the elements of first array\n"); 
    int index1; 
    for(index1 = 0 ; index1<size1; index1++) 
    scanf("%d", p1++); 

    merge(&arr1); 
    return; 
} 

void merge(int **arr1) { 
    while(**arr1) //**arr1 is the content of the passed array, if there 
        // is an int in it, print that out and increment to next one 
    { 
     printf("%d", **arr1); // ** is the content and * is the address i think, right? 
     *arr1++; 
    } 
} 
+4

출력을 어떻게 받습니까? 너는 무엇을 기대 했는가? 지금까지 어떤 디버깅을 했습니까? –

+2

코드를 형식화하십시오. –

+0

죄송합니다. 편집했습니다. –

답변

3

귀하의 merge() 코드 배열이 0으로 종료 될 것으로 기대하고있다. 호출 코드가 그렇게하지 않으므로, 동작은 지정되지 않습니다 (코드를 시도 할 때 segfault가 발생했습니다).

다른 문제

*arr1 괄호를 넣어해야한다는 것입니다 :

(*arr1)++; 

나는이 수정하여 코드를 실행하고 마지막 요소에 대해 0을 입력하면 코드가 잘 실행됩니다.

+0

맞아, 그 포인터 값에 유효한 것이 있는지 확인하고 싶습니다. while 문을 채워야합니까 ?? –

+0

@qwrqwr 'malloc'에 여분의 요소를 할당하고 루프 뒤 *에 0을 넣는 것이 한 가지 방법입니다. 물론 이것은 사용자가 0을 입력하는 것을 방지합니다. 이것이 문제가된다면 다른 숫자를 "guard"로 사용하거나 두번째 매개 변수로'merge'에'size1'을 전달하십시오. – dasblinkenlight

+0

그래서 여분의 크기 매개 변수를 사용하지 않고 해당 요소가 유효한지 확인할 방법이 없다고 말하는 중입니까? –

관련 문제