一、malloc:动态开辟一块内存空间,大小是自己指定的,需要拿一个指针接收它的返回值
malloc向内存申请空间后,必须先判断内存开辟成功没,判断方法就是malloc返回的指针是不是指向NULL,指向NULL代表内存开辟失败:
通常,动态内存开辟需要配合free使用,当不用这块内存空间就free它,且把指向这块内存的指针置空:
二、calloc动态开辟一块内存空间,大小是自己指定的,需要拿一个指针接收它的返回值
calloc与malloc的区别在于,calloc动态内存开辟后,会将申请的空间每个字节初始化位为0:
三、realloc:动态调整已开辟的内存空间大小,大小是自己指定,并拿一个指针接收它的返回值(动态调整内存空间大小,都是把空间调整得更大)
realloc有两种情况:
第一:动态调整已开辟的内存空间大小,如果原有内存空间够大,那么就在这块内存空间后面继续开辟;
第二:动态调整已开辟的内存空间大小,如果原有内存空间不够大,那么就会自动重新找一块内存空间开辟,并且自动把原来的那块空间的值拷贝的新空间,旧空间自动被释放掉。
值得注意的是:
使用realloc重新调整内存空间大小时,如果p指针指向了重新调整内存前那块区域,那么重新调整内存后,需要拿一个新指针接收,因为如果realloc开辟失败了,那么会返回NULL,此时如果拿p指针接收,那么导致p变成了NULL,找不回之前的那块空间了,所以拿新指针接收,判断realloc函数返回值不是NULL,再把这个新指针指向的空间给回p: