【无标题】动态内存分配

1.malloc函数开辟动态内存存储区  void *malloc(unsigned int size)
①注意指针的类型为void,它只提供一个纯地址
②申请一组连续的空间,即为数组
 

#include<stdio.h>
#include<malloc.h>
int main()
{
	int a = 0;
	int *p1 = &a;
	*p1 = 100;
	printf("%d\n",a);//静态开辟空间
	int a = 0;
	int *p2 = (int *)malloc(sizeof(int));//动态开辟
//开辟了两个空间,在堆开辟了四个字节的整形空间(释放空间),一个是栈区开辟了保存p2这个指针变量的空间(不需要手动释放空间,)
	*p2 = 100;
	

}

①int *p2 = (int *)malloc(sizeof(int));
    *p2 = 100;

这样做会造成内存泄漏——动态开辟了内存空间而没有释放(用free函数释放动态存储区)

—— free(p1);释放的是p1指针所指向的空间,p1不会被付空,p1还是指向这个空间(将其称为野指针)

—— p=NULL;//释放指针,预防野指针

2.用calloc函数开辟动态存储空间void *malloc(unsigned n,unsigned size)

作用:是在内存的动态存储区中分配n长度为size的连续空间,这个空间一般比较大,足以保存一个数组

void main()
{
	int n = 10;
	int *p = (int *)calloc(n, sizeof(int));

}

p=calloc(50,4);   //开辟50×4个字节的临时分配域,把首地址付给指针变量 

注意:以上两个都要判断是否为空

if (pa == NULL)
	{
		printf("Out Of Memory.\n");
		return;
	}

3.用realloc函数重新分配动态存储区

realloc(p,50);    //将p所指向的已分配的董涛空间改为50字节

void main()
{
	int n = 10;
	int *pa = (int*)malloc(sizeof(int)*n);//申请10个整形空间,强转为int类型

	if (pa == NULL)
	{
		printf("Out Of Memory.\n");
		return;
	}
	for (int i = 0; i < n; ++i)
	{
		pa[i] = i + 1;

	}
	for (int i = 0; i < n; ++i)
		printf("%d", pa[i]);
	printf("\n");
	n = 10;
	pa = (int*)realloc(pa, sizeof(int)*n);
	free(pa);
	pa = NULL;
	if (pa == NULL)
	{
		printf("Out Of Memory.\n");
		return;
	}
	for (int i = 5; i < n; ++i)
	{
		pa[i] = i + 1;

	}
	for (int i = 0; i < n; ++i)
		printf("%d", pa[i]);
	printf("\n");


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值