在学习C语言时我们学习动态内存管理,涉及到了三种方法,现在来看看他们之间的区别吧。
相同点:
malloc、calloc、realloc都是动态内存管理的库函数,它们申请的空间都在堆上,并且使用完毕后必须用free来进行释放。返回值类型都是void*,并且接受返回地址时必须要进行强转。例如:int* s = (int)* malloc(20)。
不同点:
malloc: void malloc(size_t size)
返回值类型是void*,在接受返回的地址空间时必须进行强转。
申请成功:返回的是空间首地址
申请失败:返回NULL
参数:申请空间所占的内存字节数。
申请的空间在堆上,使用完毕后要用free来进行释放。
calloc:void *calloc(size_t nmemb, size_t size)
返回值和malloc一致。
参数列表:参数一表示元素个数,参数二表示单个元素的大小。
realloc: void *realloc(void *ptr, size_t size)
realloc所代表的意思是将ptr所指向的空间大小调整到size字节。
如果说ptr指向的是空,该函数就相当于malloc函数。
假设:ptr所指向的空间总共占old个字节
size <= old:将ptr所指向的空间缩小到size个字节–>直接返回ptr所指向的空间的首地址。
size > old:将ptr所指向的空间扩增到size个字节(大一点:直接返回原空间的首地址;大的多的多:需要申请新空间,将旧空间中的元素拷贝到新空间中,释放旧空间,返回新空间的首地址)