问题
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);
}
In this code example, can I be sure that a smaller
reallocwill drop the highest number?Is the
reallocis only freeing the last memory and keeping the same address instr? Or may the address change even though it's getting smaller and for sure have space in the current place?
回答1:
Yes. If you have a memory block
pof sizeNand you dorealloc(p, M), then (assumingreallocsucceeds), the result will contain the firstmin(N, M)bytes fromp.The address can change, even if the new size is smaller than the old one.
reallocsimply makes no guarantees about this case (it can even fail).
来源:https://stackoverflow.com/questions/38927320/decreasing-realloc