学习数据结构--动态内存分配的必要知识(基础)

学习数据结构--动态内存分配的必要知识(基础),第1张

动态内存分配所需要用到的函数-三个开辟函数,一个释放函数(来自cplusplus里面的使用)

这四个函数都是在堆上进行动态内存开辟的

三个动态开辟的函数返回值都是指针类型,但是不知道用户所需要的类型,因此在前面需要进行强制类型转换为自己实际需要的参数类型,本文以int类型进行说明。

1、malloc函数和free函数的使用

malloc函数的返回值为一个指针类型,会有开辟内存空间失败的情况,则在使用前需要进行检查,参数类型为开辟空间的字节数。

 

free函数的参数为前面开辟空间的地址

使用完空间,在释放的时候,最后加上把刚刚开辟的空间地址置为空指针,防止野指针的使用

 这里附上完整代码

#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
int main()
{
	int* p = (int*)malloc(40);
    //对开辟的空间进行判空 *** 作
	if (p == NULL)
	{
		return 1;
	}
	int i = 0;

	for (i = 0; i < 10; i++)
	{
		*(p + i) = i;
	}
	for (i = 0; i < 10; i++)
	{
		printf("%d\n", *(p+i));
	}
	free(p);
	p = NULL;//避免使用野指针
	return 0;
}

 2、calloc函数和free函数的使用

calloc函数的返回值也是指针,第一个参数为开辟的空间数,第二个参数是每个内存块需要的字节个数,这里calloc函数的优点是对开辟的空间进行初始化

 

 下面附上完整的代码使用

#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include 
int main()
{
	int* p = (int*)calloc(10, sizeof(int));//参数类型意义
	if (p == NULL)//同样进行判空 *** 作
	{
		return 1;
	}
	int i = 0;

	for (i = 0; i < 10; i++)
	{
		*(p + i) = i;
	}
	for (i = 0; i < 10; i++)
	{
		printf("%d\n", *(p + i));
	}
	free(p);
	p = NULL;
	return 0;
}

 3、realloc函数和free函数的使用

realloc函数主要是对之前开辟的空间进行增加,第一个参数类型为之前开辟空间的基地址,第二个参数类型是需要增加至多大的空间,realloc函数会自动进行内存空间的寻找

 

完整代码如下

#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include 
int main()
{
	int i = 0;
	int* p = (int*)calloc(10, sizeof(int));
	if (p == NULL)
	{
		return 1;
	}

	for (i = 0; i < 10; i++)
	{
		*(p + i) = i;
	}
	for (i = 0; i < 10; i++)
	{
		printf("%d\n", *(p + i));
	}
	int* pa = (int*)realloc(p, 80);
	if (pa== NULL)
	{
		return 1;
	}
	p = pa;
	for (i = 0; i < 20; i++)
	{
		*(p + i) = i;
	}
	for (i = 0; i < 20; i++)
	{
		printf("%d\n", *(p + i));
	}
	free(p);
	p = NULL;
	return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/735310.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存