2014-01-08 2 views
1

함수에서 더 많은 요소 P를 읽어야합니다. 루프에서 매번 pElem을 만드는 것이 더 좋습니까?변수 혼동

dataStr * process(char *start, char *stop, GTree* tree) 
{ 
    while ((cp != NULL) && (cp < nextI)) 
    { 
     //I malloc inside of getPElem function 
     pElem * p = getPElem(cp, dateP, s); 
     free(p); 
    } 
} 

또는 P- 요소를 한 번 초기화하고 매번 다시 사용해야합니까?

dataStr * process(char *start, char *stop, GTree* tree, pElem * p) 
{ 

    while ((cp != NULL) && (cp < nextI)) 
    { 

     fillPElem(p, cp, dateP, s); 

    }  
} 

또는 같은 함수 내에서 모든 시간 : 하나 개의 요소가 더 좋을 것이다

dataStr * process(char *start, char *stop, GTree* tree) 
{ 
    pElem * p = malloc(sizeof(p)); 
    while ((cp != NULL) && (cp < nextI)) 
    { 
     fillPElem(p, cp, dateP, s); 

    } 
    free(p); 
} 

경우에, 나는 그것을 기능 (기능 "프로세스"너무 루프라고합니다) 외부를 malloc을한다 두 번째 예?

dataStr * process(char *start, char *stop, GTree* tree) 
{ 
    pElem p; 
    while ((cp != NULL) && (cp < nextI)) 
    { 
     fillPElem(&p, cp, dateP, s); 

    } 
} 

(예, 내가 알고 CP의 없음, nexti는 등은 다음과 같습니다 당신은 포함하는 범위보다 더 오래 살기 위해 pElems이 필요하지 않은 경우

+1

두 개의 첫 번째 발췌 문장은 동등한 것으로 간주됩니까? – UmNyobe

+0

나를 위해, 루프의'malloc'은 최적화되지 않았습니다. 버퍼처럼 사용한다면'malloc'을 하나만 사용해야합니다. – jml

+0

예, 모든 스 니펫은 동일해야합니다. – MaMu

답변

3

는 동적으로 전혀 할당 할 필요가 없습니다 정의 - 그냥 질문에서 복사).

+0

그래서 함수 밖에서 할당하고 param으로주는 것이 더 좋지 않겠습니까? – MaMu

+0

나는 그것을 사용하려고하는 방법에 대한 힌트없이 대답 할 수 없다. 원래 함수 중 아무 것도 함수 외부에 요소를 노출하지 않습니다. – Useless

+0

외부에서 전혀 필요하지 않습니다. 내가 그것에 대해 묻는 유일한 이유는 함수 프로세스가 루프에서 호출된다는 것입니다. 그래서 매번 새로운 pElem p를 얻습니다. 내 생각에, 한 번 밖에 초기화 할 수 있습니다. 나는 왜 더 나은가를 정말 duno 그래서 내가 물었습니다. 귀하의 솔루션은 훨씬 더 자연 스럽습니다. 변수를 선언하는 – MaMu