C语言如何动态分配空间:malloc

版权声明:转载请注明出处! https://blog.csdn.net/ZouHuiDong/article/details/90415482

一般的变量在定义是就要确定大小,但是有的时候不知道用户的需要,就比如说排序,你不知道用户想要给几个数排序,所以为了保险起见往往是定义一个很大的变量,而实际上用户可能只需要给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的参数也要有所改变。

猜你喜欢

转载自blog.csdn.net/ZouHuiDong/article/details/90415482