问题
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
realloc
will drop the highest number?Is the
realloc
is 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
p
of sizeN
and you dorealloc(p, M)
, then (assumingrealloc
succeeds), 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.
realloc
simply makes no guarantees about this case (it can even fail).
来源:https://stackoverflow.com/questions/38927320/decreasing-realloc