C语言中的malloc和realloc

在C语言的学习中,如果遇到用户输入的数据大小不确定或者是想要通过函数返回一个可用的堆空间,这时就需要了解动态分配内存大小的函数malloc,而realloc则是对空间进行扩容
1.malloc and realloc
头文件:
#include
函数声明:
void malloc(size_t size);
函数说明
void
指的是未定义类型指针,在申请空间时系统还不知道你要存储什么类型的数据,所以在使用函数时,需要强制转化。size指申请空间的大小:以字节来计算,一般和sizeof()配合使用。
返回值说明:
malloc函数申请size字节的内存并返回一个指向该内存的未初始化指针.如果size为0,就返回NULL或是一个唯一值的指针,随后会被free()函数释放。


函数声明:
void *realloc(void *ptr, size_t size);
函数说明:
realloc函数改变ptr指向size个字节的内存块大小
if ptr == NULL 等价于:malloc(size)
if size==0 && ptr != NULL 等价于:free(ptr)
if ptr!=NULL 即它肯定由先前的函数malloc(),realloc(),calloc()返回的
if ptr指向的内存块被移动 调用free()函数
返回值说明:
如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。:
百科中总结的关于realloc的用法

  1. realloc失败的时候,返回NULL
  2. realloc失败的时候,原来的内存不改变,不会释放也不会移动
  3. 假如原来的内存后面还有足够多剩余内存的话,realloc的内存=原来的内存+剩余内存,realloc还是返回原来内存的地址; 假如原来的内存后面没有足够多剩余内存的话,realloc将申请新的内存,然后把原来的内存数据拷贝到新内存里,原来的内存将被free掉,realloc返回新内存的地址
  4. 如果size为0,效果等同于free()。这里需要注意的是只对指针本身进行释放,例如对二维指针**a,对a调用realloc时只会释放一维,使用时谨防内存泄露。
  5. 传递给realloc的指针必须是先前通过malloc(), calloc(), 或realloc()分配的
    6.传递给realloc的指针可以为空,等同于malloc。

你可能感兴趣的:(C语言学习)