2013-06-05 3 views
-1

ptr을 수정하면 효과가 없습니다. ? f 함수를 통해 값을 변경하려고합니다.간단한 예제에서 간단한 포인터를 전달하면 작동하지 않습니다

void f(int *ptr, int size, int value){ 
    ptr=(int*)malloc(sizeof(int)); 
    if(ptr!=NULL){ 
     int i; 
     for(i=0;i<size;i++) 
      *(ptr + i) = value; 
     } 

} 

int main (void) 
{ 
    int *vector = NULL; 
    f(&vector, 3, 324); 
    printf("%p\n", vector); 

} 
+3

컴파일러의 경고를 켜고 _read_하십시오. – Mat

+0

(어쨌든 작동해서는 안됨) 경고 : 호환되지 않는 포인터 유형에서'f '의 인수 1 전달 | –

+0

네, 그렇게해서 해결하십시오. – Mat

답변

5

당신은 로컬 매개 변수 ptrmalloc의 결과를 할당한다. ptr으로 지정해야합니다.

void f(int **ptr, int size, int value) 
{ 
    *ptr = (int*)malloc(sizeof(int) * size); 
    // Rest of code 
} 
+0

ptr이 (가) 로컬입니까? 방법? –

+1

'ptr'은 함수의 매개 변수이므로 로컬 변수입니다. –

+1

@PiotrWera : 형식 매개 변수'ptr'는 실제 매개 변수'vector'와는 메모리에있는 고유 한 객체이며'f'에 국한됩니다. 'f'에서'ptr'에 대한 변경은'vector'에 반영되지 않습니다. 'ptr'에 쓰는 대신'ptr' *가 *를 가리 키거나'* ptr'을 써야합니다. 당신은 그곳에있는 대부분의 방법 이었지만, 함수 프로토 타입에'ptr' 타입이 잘못되었습니다 (매트가 보여준 것처럼'int ** ptr'이어야합니다). –

관련 문제