2013-02-19 2 views
0

내 메모리는 다음과 같은 프로그램에 할당 해제하려고 : 나는 다음을 얻을확보 realloc을이 원인이 오류

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

void main(int argc, char** argv) { 
    int* x = (int *) malloc(4 * sizeof(int)); 
    int i; 

    for(i = 0; i < 4; i++) { 
    x[i] = i; 
    printf("X[%d] = %d\n", i, x[i]); 
    } 

    x = (int *) realloc(x, 4 * sizeof(int)); 

    for(i = 0; i < 8; i++) { 
    x[i] = i; 
    printf("X[%d] = %d\n", i, x[i]); 
// free(x[i]); 
    } 

    free(x); 
} 

: libc의 오류 중단은 : *의 glibc는 ./a.out 감지 : 무료() : 다음 크기가 잘못되었습니다 (빠름) : 0x00000000014f8010 * *

나는 마지막 루프에서 자유롭게하려고했지만 여전히 문제가 있습니다. 내가 어디로 잘못 가고 있니?

답변

1

realloc()은 할당 된 메모리를 지정된 양만큼 증가시키지 않습니다. 요청 된 바이트 양을 정확히 재 할당합니다. C에서의 malloc() 및 realloc을()의 반환 값을 캐스팅하지 않습니다,

x = realloc(x, 8 * sizeof(int)); 

Btw는 : 당신은 긴 팔 개 정수로 배열의 크기를 조정하려는 경우, 당신은해야합니다

http://c-faq.com/malloc/mallocnocast.html

+0

http://c-faq.com/malloc/realloc.html – Sebivor