2012-09-04 5 views
1

나는 배움의 목적을 위해 간단한 프로그램을 가지고 있지만 할당 된 배열에서 realloc 할 때 null을 계속받습니다. 내가 잘못 뭐하는 거지 내가 realloc 함수 할 수 아니에요realloc return null

#include <stdio.h> 

#include <stdlib.h> 


void main() 
{ 
    char *ptr, *retval; 

    ptr = (char *)calloc(10, sizeof(char)); 

    if (ptr == NULL) 
     printf("calloc failed\n"); 
    else 
     printf("calloc successful\n"); 

    retval = (char *)realloc(ptr, 5); 

    if (retval == NULL) 
     printf("realloc failed\n");  
    else 
     printf("realloc successful\n"); 

    free(ptr); 
    free(retval); 

} 

, retval = (char *)realloc(ptr, 5); ?

+3

'ptr'을 비우면 안됩니다. – md5

+1

C 코드 또는 C++ 코드 여야하나요? –

+1

'void main'은 정의되지 않은 동작입니다 (구현에서 정의하지 않는 한) – pmg

답변

3

는 그것은 나를 위해 예상 작품과 같이

calloc successful 
realloc successful 
*** glibc detected *** double free or corruption 

코드는 이중 무료로 의도적 가정, 잘 보인다. 이미 다시 할당 했으므로 free(ptr)으로 전화하지 마십시오.

1

컴파일 할 때 유용합니다. ptr이 가리키는 메모리가 재 할당 할 때 더 이상 유효하지 않을 때 "free (ptr)"라고 부르는 버그가 하나 있습니다. 그것은 아마도 retval과 같을지라도 두 번 해방하고 있습니다.

+0

문제가 해결되었습니다. 고맙습니다. –