2016-11-02 2 views
-2

다음 코드 스 니펫의 차이점은 무엇입니까?C 프로그램에서 malloc 사용

int main() 
{ 
int *p; 
p= (int*)malloc(sizeof(int)); 
} 

int main() 
{ 
int *p = (int*)malloc(sizeof(int)); 
} 
+0

스택 오버플로에 오신 것을 환영합니다! ['malloc()'과'C'의 패밀리의 반환 값을 왜 던지지 말아야하는지에 대한이 토론을보십시오.] (http://stackoverflow.com/q/605845/2173917). –

+0

첫 번째는'p'에 대한 할당입니다. 두 번째는'p'의 초기화입니다. 최종 결과는 동일하지만 의미 적 차이가 있습니다. –

+0

이 질문은 'malloc'과 관련이 없다는 것을 이해했습니다. –

답변

4
  • 제 니핏은 포인터를 정의하는 두 단계, 및 상기 포인터 assigning유효한 ** 값이다.

  • 두 번째 조각은 initializes 포인터를 호출하고 malloc()을 호출하여 한 단계로 선언합니다.

결과적으로 두 스 니펫의 최종 결과는 같습니다. 이는 사용할 표준 지침을 코딩하는 것에 관한 것입니다.

첫 번째 스타일을 사용하는 경우 NULL 포인터를 초기화하여 이 우발적으로 사용되는 것을 방지하십시오. 전에 할당하십시오.

즉, please see this discussion on why not to cast the return value of malloc() and family in C.입니다.


** [주] 제공 malloc() 성공.

+0

나는 이것을 얻지 못한다 : 첫 번째 스타일을 사용하는 경우 _ 할당 전에 포인터의 우발적 인 사용을 막기 위해 포인터를 NULL로 초기화하는 것을 고려한다. OP는'realloc'을 사용하지 않는다. ('malloc'을 초기화되지 않은 포인터). –

+2

@KeineLust : 이것은 일반적인 코딩 지침입니다. 보통 포인터와 malloc()을 포함하는 프로그램은 더 복잡하고 실수가 발생할 수 있습니다. – mouviciel

+0

@KeineLust는 정리하기 위해 _use_라고 말하면서 _defererence_를 의미했습니다. 더 좋아? –