- calloc和malloc一样都是在堆区分配内存
- 不同点在于 calloc 会将分配的内存初始化为0
- realloc重新在堆区分配内存
- 如果分配的内存比原来要大,这个时候有两种情况出现
- 原有空间后序有足够大的空闲空间,那么直接在原有空间后继续开辟内存,返回原有空间的首地址
- 原有空间后序没有足够大空闲空间,重新会分配一个足够大的空间,并且将原有空间的内容拷贝到新空间下,释放原有空间,将新空间的首地址返回
void test01()
{
int * p = malloc(sizeof(int)* 10);
for (int i = 0; i < 10; i++)
{
printf("%d\n", p[i]);
}
if (p != NULL)
{
free(p);
p = NULL;
}
}
?
void test01()
{
int * p = calloc(10, sizeof(int)); //和malloc不同的地方在于 将堆区分配的内容初始化为0
for (int i = 0; i < 10; i++)
{
printf("%d\n", p[i]);
}
if (p != NULL)
{
free(p);
p = NULL;
}
}
?
void test02()
{
int * p = malloc(sizeof(int) * 10);
printf("%d\n", p);
for (int i = 0; i < 10; i++)
{
p[i] = i;
}
p = realloc(p, sizeof(int) * 10);
for (int i = 0; i < 10; i++)
{
printf("%d\n", p[i]);
}
printf("%d\n", p);
if (p != NULL)
{
free(p);
p = NULL;
}
}
?
|