int main()
{
int *ptr = (int*)calloc(10,sizeof(int));//allocating memory for 10 integers
ptr = realloc(ptr,20*sizeof(int)); //reallocating the memory for 20 integers
free(ptr);
return 0;
}
最初,ptr保持内存包含零,但新创建的内存包含零或垃圾值。
如果零提供realloc如何知道天气,则使用malloc或calloc创建ptr。
答案 0 :(得分:3)
即使您正确地调用了realloc
(没有强制转换结果并将其分配回来或它无法正常工作):
ptr = realloc(ptr,20*sizeof(int));
(有些人可能会认为它不安全,因为realloc
可以返回NULL
,从而将参考号丢失为ptr
)
它没有。它只是重新分配而不将其余部分设置为0
例如,您必须使用memset
手动将内存的其余部分设置为0。
我愿意:
int *ptr_new = realloc(ptr,20*sizeof(int));
if (ptr_new == NULL) { /* print error, free(ptr) and exit: no more memory */ }
else
{
// set the end of memory to 0
memset(ptr_new+10,0,sizeof(int)*10);
...
注意:一个常见的错误是不分配realloc
的结果,因为它似乎有效,直到操作系统需要将内存移动到另一个块,在这种情况下,您的ptr
指针变为无效,并且您有未定义的行为。