减少realloc

时间:2016-08-12 22:35:21

标签: c realloc

我有一些关于理解的问题 realloc行为。

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

int main()
{
    int *str;

    /* Initial memory allocation */
    str = malloc(5 * sizeof(int));
    *str = 1;
    *(str + 1) = 2;
    *(str + 2) = 3;
    *(str + 3) = 4;
    *(str + 4) = 5;

    /* Reallocating memory */
    int i, j;

    for (i = 5; i > 0; i--) {
        str = realloc(str, i * sizeof(int));

        for (j = 0; j < i; j++) {
            printf("%d", *(str + j));
        }  

        printf("\n");
    }

    free(str);

    return(0);
}
  1. 在此代码示例中,我可以确定较小的realloc会丢弃最高的数字吗?

  2. realloc是否只释放最后一个内存并在str中保留相同的地址?或者地址可能会变小,即使它变得越来越小并且肯定在当前位置有空间?

1 个答案:

答案 0 :(得分:4)

  1. 是。如果你有一个大小为p的内存块N而你做realloc(p, M),那么(假设realloc成功),结果将包含第一个min(N, M)个字节来自p

  2. 即使新尺寸小于旧尺寸,地址也会发生变化。 realloc根本不保证这种情况(甚至可能失败)。