相比于malloc加了有一个自动初始化的功能
int main()
{
int* p = (int*)calloc(10,sizeof(int));//创建之后就默认数据初始化为0
if (p == NULL)
{
printf("%s\n", strerror(errno));
}
else
{
int i = 0;
for (i = 0; i < 10; i++)
{
*(p + i) = i;
}
for (i = 0; i < 10; i++)
{
printf("%d ", *(p + i));
}
}
free(p);//释放动态开辟的空间
p = NULL;
return 0;
}
realloc的使用方法,和注意事项
realloc在申请和添加空间的时候,有两种情况,一种是后面的空间足够可以追加,一种是后面的空间不足够进行追加,这时候就会重新申请一块足够大的空间。都是在堆区上进行操作的。
realloc也可以实现和malloc相同的功能,如下图所示
常见的错误都是对操作函数认识不足产生的。
1.对NULL进行解引用操作
万一mallocc创建失败,P就被赋值为NULL,对空指针进行解引用操作就会出问题
2.对动态开辟空间的越界访问
3.对非动态开辟内存使用free释放
4.使用free释放动态开辟内存的一部分
5.对同一块动态内存的多次释放
6.动态开辟内存忘记释放
内存笔试题
1
错误地方,以及存在的问题
第一种改正方式,利用二级指针的方式改正
第二种改正方式,利用返回值的方式改正