我有一些关于理解的问题
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);
}
在此代码示例中,我可以确定较小的realloc
会丢弃最高的数字吗?
realloc
是否只释放最后一个内存并在str
中保留相同的地址?或者地址可能会变小,即使它变得越来越小并且肯定在当前位置有空间?
答案 0 :(得分:4)
是。如果你有一个大小为p
的内存块N
而你做realloc(p, M)
,那么(假设realloc
成功),结果将包含第一个min(N, M)
个字节来自p
。
即使新尺寸小于旧尺寸,地址也会发生变化。 realloc
根本不保证这种情况(甚至可能失败)。