动态内存分配(callco,realloc,笔试题目)2_初始化

相比于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;
}

动态内存分配(callco,realloc,笔试题目)2_初始化_02

动态内存分配(callco,realloc,笔试题目)2_动态内存_03

realloc的使用方法,和注意事项

动态内存分配(callco,realloc,笔试题目)2_动态内存_04

realloc在申请和添加空间的时候,有两种情况,一种是后面的空间足够可以追加,一种是后面的空间不足够进行追加,这时候就会重新申请一块足够大的空间。都是在堆区上进行操作的。

realloc也可以实现和malloc相同的功能,如下图所示

动态内存分配(callco,realloc,笔试题目)2_i++_05

常见的错误都是对操作函数认识不足产生的。

1.对NULL进行解引用操作

万一mallocc创建失败,P就被赋值为NULL,对空指针进行解引用操作就会出问题

动态内存分配(callco,realloc,笔试题目)2_i++_06

2.对动态开辟空间的越界访问

动态内存分配(callco,realloc,笔试题目)2_i++_07

3.对非动态开辟内存使用free释放

动态内存分配(callco,realloc,笔试题目)2_初始化_08

4.使用free释放动态开辟内存的一部分

动态内存分配(callco,realloc,笔试题目)2_动态内存_09

动态内存分配(callco,realloc,笔试题目)2_i++_10

5.对同一块动态内存的多次释放

动态内存分配(callco,realloc,笔试题目)2_初始化_11

6.动态开辟内存忘记释放

动态内存分配(callco,realloc,笔试题目)2_初始化_12

内存笔试题

1

动态内存分配(callco,realloc,笔试题目)2_动态内存_13

错误地方,以及存在的问题

动态内存分配(callco,realloc,笔试题目)2_初始化_14

第一种改正方式,利用二级指针的方式改正

动态内存分配(callco,realloc,笔试题目)2_动态内存_15

动态内存分配(callco,realloc,笔试题目)2_i++_16

第二种改正方式,利用返回值的方式改正

动态内存分配(callco,realloc,笔试题目)2_初始化_17