Decreasing realloc

荒凉一梦 提交于 2019-12-11 01:07:10

问题


I have a few questions about understanding realloc behavior.

#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. In this code example, can I be sure that a smaller realloc will drop the highest number?

  2. Is the realloc is only freeing the last memory and keeping the same address in str? Or may the address change even though it's getting smaller and for sure have space in the current place?


回答1:


  1. Yes. If you have a memory block p of size N and you do realloc(p, M), then (assuming realloc succeeds), the result will contain the first min(N, M) bytes from p.

  2. The address can change, even if the new size is smaller than the old one. realloc simply makes no guarantees about this case (it can even fail).



来源:https://stackoverflow.com/questions/38927320/decreasing-realloc

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!