2013-04-23 3 views
0

많은 사과와 관련한 질문을 이미 알고 있으므로 매우 간단하게 설명하겠습니다.함수 내에서 realloc 사용

몇 년 동안의 프로그래밍에도 불구하고 함수 내에서 배열 (또는 여러 개)의 크기를 조정하고 수정하기위한 올바른 구문을 찾을 수 없습니다. 아마 필요, 나는이 작동하지 않습니다 알고

int main(int argc, char *argv[]) { 
    float *data = NULL 
    int n = myfunction(data); 
    for(i=0;i<n;i++) printf("%f\n",data[i]); 
    free(data); 
} 

int myfunction(float *input) { 
    int i,n=10; 
    input = (float *) realloc(input, n*sizeof(float)); 
    if(input!=NULL) { 
     for(i=0;i<n;i++) input[i] = (float)i; 
     return(n); 
    else return(-1) 
} 

예를 들어, 내가 함수가 "N"이 배열 내에 정의 "N"숫자의 집합 배열을 채우기 위해 싶은 말 포인터에 대한 포인터를 사용하지만 포인터의 조합, 포인터 대 포인터 및 주소 표기법을 사용하여 함수 내부 및 외부에서 사용할 수 있는지 확인할 수 없습니다.

간단한 제안 사항에 감사드립니다.

+1

http://c-faq.com/ptrs/passptrinit.html – hmjd

+0

공정한 의견, 그러나 내가 찾던 내용이 아닙니다.) – JWDN

답변

2

당신은 myFunction

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

int myfunction(float **input) { 
    int i,n=10; 
    *input = realloc(*input, n*sizeof(float)); 
    if(*input!=NULL) { 
     for(i=0;i<n;i++) (*input)[i] = (float)i; 
     return(n); 
    } 
    else return(-1); 
} 

int main(int argc, char *argv[]) { 
    float *data = NULL; 
    int n = myfunction(&data); 
    int i; 
    for(i=0;i<n;i++) printf("%f\n",data[i]); 
    free(data); 
    return 0; 
} 
+0

감사합니다. 만약 내가 다른 사람에게 설명했다면, 배열의 주소를 전달하고 포인터에 포인터로 취급하도록 함수에 알려야하며, 함수 내에서 함수를 사용할 때 포인터 자체를 참조해야한다고 말하고 싶습니다. realloc() 또는 값 지정. 건배! – JWDN

0

에 대한 포인터에 대한 포인터를 전달해야이 경우, myfunction()에 이전 포인터를 전달하고, 이전과 동일 할 수있는 새로운 포인터를 (반환해야하는 가장 쉬운 방법 realloc()는 그 지역을 제자리에서 성장 시켰습니다.)

realloc()은 실패 할 수 있습니다.이 경우 여전히 할당 된 오래된 메모리를 잃고 싶지 않으므로 확인하지 않고 동일한 포인터를 덮어 쓰는 것이 나쁜 생각입니다.

+0

나는 당신의 요지를 고맙게 생각하지만, 나는 다른 상황에서 정확히 그렇게한다. 그러나 "진짜"프로그램은 내가 게시 한 간단한 예제보다 더 복잡한 헬라어이며 두 개 이상의 배열을 수정해야하며, 각각을 realloc()으로 성장시켜야한다. 필요합니다. – JWDN