动态内存分配的使用方法和注意事项

动态内存分配

一.步骤:
①了解需要多少内存空间(malloc后面是n个sizeof还是一个sizeof);
②利用c语言提供的动态内存分配函数来分配所需要的存储空间;
③使指针指向获得的内存空间,以便用指针在该空间内实现运算或操作;
④当使用完内存后,释放这一空间。

在进行动态分配的操作中,c语言提供了一组标准函数,定义在stdlib.h

1) 动态存储分配函数malloc()
函数原型:
void *malloc(unsigned size);
功能:在内存的动态存储区分配一连续空间,其长度为size,若申请成功 ,则返回一个指向所分配内存空间的起始地址的指针,若申请不成功,返回NULL
例:
动态分配n个整数的空间:

p=(int *)malloc(n*sizeof(int);
if(p==NULL){
	printf("not able to allocate memory.");
	exit(1);
}

例题:

输入一个整数n,然后输入n个整数,求和。

#include 
#include 
int main()
{
	int n,*p,sum=0,i=0;
	scanf("%d",&n);
	p=(int *)malloc(n*sizeof(int));
	if(p==NULL)exit;
	
	for(i=0;i<n;i++)scanf("%d",p+i);
		for(i=0;i<n;i++){
			sum+=*(p+i);
		}
		printf("%d",sum);
		free(p);
	
	return 0;
}

注:每次动态分配都必须检查是否成功,并考虑到例外情况的处理。

2)计数动态存储分配函数 calloc()
函数原型:
void * calloc(unsigned n,unsigned size);
功能:
在内存的动态存储区分配n个连续空间,每一存储空间的长度为size,并且分配后还把存储块里全部初始化为0值。若申请成功 ,则返回一个指向所分配内存空间的起始地址的指针,若申请不成功,返回NULL
例:
动态分配n个整数空间:

p=(int *)calloc(n,sizeof(int);
if(p==NULL){
	printf("not able to allocate memory.");
	exit(1);
}

3)动态存储释放函数 free()

函数原型:
void free(void *ptr);

功能:
释放有动态分配函数申请到的整块内存空间,ptr指向要释放空间的首地址。如果ptr的值是空指针,则free什么也不做。该函数无返回值。
注:
①为了保证动态存储区的有效利用,在知道某个动态分配的存储块不再用时,就应及时将它释放。
②释放后不允许再通过指针去访问已经释放的块。
示例:

free(p);

注意: malloc对所分配的存储块不做任何事情,但calloc对整个区域进行初始化。

你可能感兴趣的:(c语言)