我有几个关于理解的问题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
会掉落最高的数字吗?
Is the realloc
只是释放最后的内存并保留相同的地址str
?或者地址可能会改变,即使它变得更小并且当前位置肯定有空间?
是的。如果你有一个内存块p
大小的N
你也是realloc(p, M)
,那么(假设realloc
成功),结果将包含第一个min(N, M)
字节来自p
.
即使新的大小比旧的小,地址也可以更改。realloc
只是对这种情况不做任何保证(甚至可能失败)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)