一、malloc申请堆区空间
malloc在堆区申请的空间不进行初始化
申请成功返回void*指针,申请失败返回空指针“NULL”
用指针来接收malloc返回的地址,并且可以用指针或者数组方式访问修改malloc申请的空间的内容,接收malloc返回的地址时需要进行强制转换对应自己需要的类型指针,接收之后判断是否为空,以确保是否申请成功,再之后可以进行内容修改,在此遵循规则使用不越界访问不造成非法访问
使用完之后释放并且把用来接收的指针置为空指针“NULL”,以防指针变为野指针
二、calloc申请堆区空间
calloc在堆区申请的空间会进行初始化为0
申请成功返回void*指针,申请失败返回空指针“NULL”
与malloc一样,强转为自己需要的类型指针并且用一个指针接收,在使用过程中需要一直保持着申请空间的首地址以便后续释放,并且遵循规则不越界访问不造成非法访问
使用完整之后释放空间并把指针置为空指针“NULL”或者指向其他有效区域,这个规则在malloc、calloc与realloc上一致,以防不释放造成内存泄漏或者释放之后再次使用造成非法访问,因为释放完后堆区的空间可能会篡改内容
三、realloc调整申请堆区空间大小
realloc可以调整malloc与calloc申请空间的大小
realloc函数第一个参数是之前在堆区申请空间的首地址,第二个参数是调整之后的大小,当第一个参数为空指针“NULL”时,效果和malloc一样在堆区申请一片空间,所以用realloc扩大申请的空间时后面的空间不进行初始化
realloc调整空间有两个可能性
realloc调整之后的空间,无论是在后面接上开辟还是新开一片地方开辟,内容不会变化,空间变大内容还是存在,空间变小则会截断后面一些内容
如果开辟失败则返回空指针“NULL”,所以在使用realloc时需要用新的指针来接收地址,以防开辟失败把之前指向的空间地址丢失
使用完之后释放“free”,并且置为空指针,和以上内容原因一样
四、free释放堆区申请的空间
free“释放”只能用于malloc、calloc与realloc在堆区开辟的空间进行释放
如果使用free释放的不是堆区开辟的空间,代码则会死机
如果使用free释放空指针“NULL”,则free什么也不做,所以不用怕多次释放接收堆区地址的指针