关于realloc()
的问题。
如果我想用realloc()
分配以前分配的内存。
是否像calloc()
一样将额外的内存初始化为0?
第二个问题是:
int * p =(int*)malloc(10*sizeof(int));
int* s = (int*)realloc(p,20);
p=s;
将s
分配给p
是调整指针p
大小的好方法吗?
我们可以realloc()
calloc()
分配的内存吗?
答案 0 :(得分:2)
将额外的内存初始化为0吗?
否。
我们可以
realloc()
calloc()
分配的内存吗?
是的
正在为
s
分配p
来调整指针p
的大小的好方法
视情况而定。
只要做
int * p = malloc(...);
int * s = realloc(p, ...);
p = s;
与
相同int * p = malloc(...);
p = realloc(p, ...);
int * s = p;
在两种情况下,如果realloc()
失败(并返回NULL
),则原始内存的地址将丢失。
但是做
int * p = malloc(...);
{
int * s = realloc(p, ...); /* Could use a void* here as well. */
if (NULL == s)
{
/* handle error */
}
else
{
p = s;
}
}
对于realloc()
的失败具有鲁棒性。即使出现故障,仍可以通过p
访问原始内存。
请注意,如果realloc()
成功,则传入的指针值不必再寻址任何有效内存。 不不读取它,也不读取指针值本身,因为在两种情况下都执行此操作可能会导致未定义的行为。