一般的变量在定义是就要确定大小,但是有的时候不知道用户的需要,就比如说排序,你不知道用户想要给几个数排序,所以为了保险起见往往是定义一个很大的变量,而实际上用户可能只需要给5个数排序,你却int k[1024];来存放要排序的数,造成极大的浪费。这里介绍一个函数用于动态分配空间:malloc
如何使用malloc
原型
extern void *malloc(unsigned int num_bytes);
头文件
#include <stdlib.h>
#include <malloc.h>
声明
void *malloc(size_t size);
注意:这里的void*是指不确定的类型,即可以给各种类型的变量分配空间。
示例
int nSize;//要使用多大的空间
scanf("%d",&nSize);//获取要使用多大的空间
//动态分配空间
int *k;
k = (int*)malloc(nSize);//分配nSize大小的空间给k
//...执行其他代码
free(k);//释放掉分配给k的空间
k = NULL;//清空
代码中之所以要在malloc前加上(int*)是因为malloc原本是void型的,要分配给一个int*型的变量,必须要进行类型转换。同样,malloc也可以分配空间给别的类型的变量,也要转换成适当类型。malloc分配的空间使用完后要清空然后用free(变量名)释放掉,否则占用的内存会越来越大。
如果申请失败
malloc也有申请空间失败的时候,那么就可以加个判断:
k = (int*)malloc(nSize);
if (k == NULL)//如果分配失败,因为如果分配成功了那k就有值。
return 0;
注意
malloc 只会分配内存,不会对分配的内存进行初始化,所以分配到的内存的值是随机的。
如果分配的内存不是一个变量(如malloc(nSize))而是有一个具体的值,那么应该这么写:
k = (int*)malloc(sizeof(int) * 64);//64是要分配的空间,如果是分配给其他类型的变量,其中的sizeof的参数也要有所改变。