malloc
在堆区分配一块指定大小的内存空间,用来存放数据,这块内存空间在函数执行完成后不会被初始化,他们的值是未知的
成功则返回指向被分配内存的指针,否则返回空指针NULL,当内存不在使用,要用free函数将内存释放,且函数返回为void类型指针,需要进行类型转换
使用malloc分配内存后,一定要检查内存分配是否成功
int * p =(int )malloc(4sizeof(int));
assert(p!=Null);
free
该函数释放address所指向的内存块,释放的是动态分配的内存空间
释放越界内存、 修改指针指向、 重复释放内存 、 释放非动态分配的内存会导致程序崩溃
calloc
在内存中的动态存储区中分配num个长度为size的连续空间,并将每个字节都初始化为0,
所以它的结果是分配了num*size个字节长度的内存空间,并且每个字节的值都是0
成功则返回一个指向分配的内存的起始地址的指针,否则返回NULL
realloc该函数重新分配内存,把内存扩展到newsize
先判断当前指针是否有足够哦的连续空间,如果有,扩大memblock指向的地址,并且将memblock返回,如果空间不够,先按照size指定的大小分配空间,将原有数据从头到尾
拷贝到新分配的内存区域,释放原来的memblock所指内存区域(自动释放,不需要free),
同时返回新分配的内存区域的首地址
define和const区别
本质上,define修饰的是常量,而const修饰的变量虽然不能被改变,但他本质上还是变量
define是宏定义,是替换,程序在编译前期会处理预处理命令,包括宏替换