2016-07-22 6 views
-1

* 참고 :이 답부터 당신은 내 질문에 대답하지 않습니다를 참조, 중복 질문이 아니다. 나는 malloc()과 calloc()이해야 할 일을 알고 있지만 가상 머신에서 사용할 때 차이점이없는 것 같지 않은지 궁금해합니다. 은 calloc 동안() 공의와 초기화의 malloc()가 당신에게 메모리를 할당 -는 (가상 머신 리눅스에서 실행) C에서의 malloc()과은 calloc()의 차이를 찾을 수 없습니다

나는 차이가되어야 하는지를 알고있다.

것은 내 코드가 표시되지 않습니다,이고,의 malloc()가 내 가상 머신 우분투에서 실행하는 동안 어떤 변화를주는 것 같지 않습니다. 몇 번 실행했고 malloc은 calloc과 똑같이 작동합니다.

주 - 난 그냥 내 실제 하드 드라이브를 확인하고, 확인, 거기에 내가받을 수 있나요 다른 결과를 작동하는 것 같다.

코드 :

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

int main(){ 
int i,n; 
float *ptr1, *ptr2; 
printf("enter a total number of float items: "); 
scanf("%d", &n); 

ptr1 = malloc(n*sizeof(float)); 
ptr2 = calloc(n, sizeof(float)); 

printf("malloc  | calloc\n"); 
printf("----------------------\n"); 
for(i=0;i<n;i++) 
printf("%-10f %10f\n", *(ptr1+i), *(ptr2+i)); 
printf("\n"); 
free(ptr1); 
free(ptr2); 
return 0; 
} 
+2

뭔가 다른 무엇을 정확하게은 calloc 같은 행위를 의미합니까? 당신은 0을 얻고 있습니까? 그것은 허용된다, 아무것도 * 당신이 * 얻지 않을 것이라는 점을 밝힌다. 그러나 아무 것도 당신에게 * 0도 얻을 것이라고 말하지 않습니다. –

+1

OT :'printf()'에 대한 코드 호출을 참조하십시오 :'malloc()'에 의해 반환 된 메모리가 초기화되지 않았습니다. 초기화되지 않은 메모리 내용을 인쇄하면 정의되지 않은 동작이 호출됩니다. – alk

+0

간단한 이유 : 페이지가 보안상의 이유로 OS에서 지워집니다. 당신은 결코 그것에 의지하지 않을 것입니다. – Olaf

답변

6

callocmalloc 동안하지, 당신이 제로 메모리 덩어리를 가지고 보장합니다. 그런 다음 malloc이 발생하지만 은 결코에 의존합니다. 의 malloc에서 얻은

1

메모리는 아무것도 포함 할 수 있습니다. 그것은 0을 포함하거나 다른 것을 포함 할 수 있습니다. malloc을 0으로 설정되지 않은에서

다음 예제 쇼 (대부분의 플랫폼에서) 그 메모리를 반환

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

int main() { 
    char *p; 
    int i; 

    for (i = 0; i < 1024; i++) { 
    p = malloc(1024); 
    strcpy(p, "something else"); 
    free(p); 
    } 
    p = malloc(100); // Get a fresh memory block 
    printf("%s\n", p); // You should not access the memory returned from malloc without assigning it first, because it might contain "something else". 
    return 0; 
} 

이 프로그램은 문자열이 NUL 경우 우리는 알지도 못하는, 아무것도 할 수 - 종료하지만, 대부분의 플랫폼에서 출력 될 것입니다 :