2012-08-01 4 views
2

누군가이 코드 부분을 설명해 주시겠습니까? 내가 틀렸다면 나를 바로 잡아라.malloc에 ​​대한 질문

  1. 복귀 크기 (32 비트 시스템에 대해) 4 바이트 메모리 블록의 시작 포인터 점수
    int *longest = malloc(sizeof(int)); 
    *longest =0; 
    

    이 평균합니까? 왜 malloc(4)을 쓰는 것이 좋을까요?
  2. 두 번째 줄에서 가장 긴 길이가 4 바이트 블록의 포인터 인 것을 의미합니까? 0에서 시작 하시겠습니까?
+0

C 또는 C++ 용입니까? 이 질문에 하나의 태그 또는 다른 태그를 포함시켜 명확하게하고 검색 등에 표시되도록하십시오. 또한, C++의 경우, 대신에'new'를 사용해야합니다. – KRyan

답변

6
  1. 예, 그것은 하나의 int에 대해 정확히 충분한 메모리를 가져옵니다. 주어진 크기를 명시 적으로 가정하지 않아야합니다. 장래에 다른 플랫폼으로 이식하는 것이 악몽입니다. 너 스스로 목격 했어. sizeof(int)이 항상 4가되는 것은 아니다.

  2. 아니요,이 값은 longest이 가리키는 새로 할당 된 메모리에 값 0을 할당합니다. 여기 *은 비 참조 연산자이며 비공식적으로 "이 포인터가 가리키는 것과 함께 작업하고 싶습니다"라고 말합니다.

+0

대단히 감사합니다. – zeejan

+1

조금 더 해보면, 특정 할당의 경우에도 더 나은 관용구가 있습니다 :'int * longest = malloc (sizeof (* longest));'이것은 타입을 반복하지 않기 때문에 만약 언젠가 타입이 변경된다면, 모든 것이 여전히 일치합니다. –