动态内存管理之三函数

要知道动态内存管理,首先就要了解一下我们的malloc这个函数

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
	int num;
	scanf_s("%d", &num);                         
	int* p = (int*)malloc(sizeof(int)*num);//强制类型转换+malloc函数的动态内存管理              
    //使用malloc函数void* malloc ( size_t size )。
	if (p == NULL)
	{
		printf("malloc::p");
	}
	else
	{
		for (int i = 0; i < num; i++)
		{
			*(p + i) = i;//将i的藏在*(p+i)=p[i]数组中
			printf("%d ", *(p + i));//p[i]
		}
		free(p);
		p = NULL;
	}
	return 0;
}

接下来,我们再来了解一下calloc这个函数

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
	int num;
	scanf("%d", &num);                         
	int* p = (int*)calloc(num, sizeof(int));//使用calloc函数void* calloc ( size_t num , size_t size );
	if (p == NULL)
	{
		printf("malloc::p");
	}
	else
	{
		for (int i = 0; i < num; i++)
		{
			*(p + i) = i;
			printf("%d ", *(p + i));
		}
		free(p);
		p = NULL;
	}
	return 0;
}

通过上述这些代码,我们可以知道,其实这些calloc与malloc这两个函数有很大的相同之处,但是,它们之间也存在很大差别,calloc和malloc函数,是否自动初始化,前者是初始化,后者不用初始化

再让我们来了解一下realloc这个函数

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
	int* p = (int*)malloc(sizeof(int) * 10);
	if (p == NULL) {
		perror("malloc::p");
	}
	else {
		printf("%p\n", p);
	}
	int* ptr = (int*)realloc(p, sizeof(int) * 20);//创建临时变量
	//如果使用 int* p = (int*)realloc(p,....这样的话如果创建失败,返回NULL,
	//这样的话p的内容就没有了,所以创建临时变量ptr,然后下面判空之后可以交换
	if (NULL == ptr) {
		perror("realloc::ptr");
	}
	else {
		p = ptr;
		ptr = NULL;
		printf("%p\n", p);
	}

	free(p);
	p = NULL;
	return 0;
}

这就是这三个函数的使用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值