realloc()関数

割り当て済み猟奇のサイズを変更することができる。

#include 
#include 

#define BUFF_SIZE 256

int main(void)
{
    int i;
    unsigned char *pmem = NULL, *pmemsave = NULL, *pmemnew = NULL;
    
    pmemsave = pmem = (unsigned char *)malloc(BUFF_SIZE);
    if (pmem == NULL){
        fprintf(stderr, "メモリ割り当てに失敗しました。\n");
        exit(EXIT_FAILURE);
    }
    
    for (i = 0; i < BUFF_SIZE; i++)
        *pmem++ = (unsigned char)i;
    
    pmem = pmemsave;
    
    for (i = 0; i < BUFF_SIZE; i++)
        printf("%u ", *pmem++);
    printf("\n");
    
    pmemnew = realloc(pmemsave, BUFF_SIZE * 2);
    if (pmemnew != NULL){
        pmem = pmemnew;
        for (i = 0; i < BUFF_SIZE * 2; i++)
            printf("%u ", *pmem++);
        printf("\n");
        
        free(pmemnew); pmemnew = NULL;
    }
    else {
        free(pmemsave); pmemsave = NULL;
        
        fprintf(stderr, "メモリの再割り当てに失敗しました\n");
        exit(EXIT_FAILURE);
    }
    
    return 0;
}