malloc:
应用条件:
开辟一个数组时,可能分配多了造成内存浪费或者分配少了造成内存不足的情况。所以引入malloc函数:
malloc时动态内存分配函数,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址。
用法及注意事项:
1.malloc函数的返回的是无类型指针,在使用时一定要强制转换为所需要的类型。
int *a = (int *)malloc(12);
语句解释:malloc的返回值是无类型的,开辟出来的12个字节的内存空间强制给他变成整型。
(把无类型变成整形)
再定义一个指针指向开辟出的这块空间。
malloc也可以是数组的定义方式。
2.malloc函数返回的实际是一个无类型指针,必须在其前面加上指针类型强制转换才可以使用
指针自身 = (指针类型*)malloc(sizeof(指针类型)*数据数量)
free:
作用:
释放malloc(或calloc、realloc)函数给指针变量分配的内存空间。
注意:使用后该指针变量一定要重新指向NULL,防止悬空指针(失效指针)出现,有效规避错误操作。
注意:
在使用malloc开辟空间时,使用完成一定要释放空间,如果不释放会造内存泄漏。
在使用malloc函数开辟的空间中,不要进行指针的移动,因为一旦移动之后可能出现申请的空间和释放空间大小的不匹配
while(1){
sleep(1); //每隔一秒
int *p = malloc(1024); //申请1M空间
}
free(p); //及时释放
p = NULL; //不让他变成野指针