介绍三个库函数,它们可以直接向内存申请特定大小的空间,然后就可以使用这些空间了。
这三个库函数分别是malloc calloc realloc
明明已经有结构体、数组、int、float、double等类型可以直接创建,向内存申请空间。为什么还要这三个库函数呢?
前者申请创建的内存大小是不能改变的,创建时是多少就是多少。而malloc、calloc和realloc申请的内存空间是可以改变的。如果感觉内存不合适,随时可以再加或者减。
前者创建的内存是在栈区,而通过malloc等函数申请的空间在堆区。用完之后还要通过free函数释放申请的空间。
malloc
void * malloc( size_t size);
以上是函数声明,malloc的返回类型是void *的指针,传的参数size表示想申请的内存大小,单位是字节。如果申请的内存太大超过栈区空间申请失败,则返回空指针。需要注意的是,在使用申请内存空间的时候,会用到这个返回的指针(解引用操作来赋值),如果返回的是空指针(申请失败),则导致程序崩溃。所以在使用的时候要检验一下,如果程序不为空指针再使用。
free
free(void * ptr)
free主要用于释放malloc、calloc和realloc申请的内存。free的参数是指针,这个指针必须是所申请存的初始地址。(如果不是,程序会崩溃)
int *p = (int *)malloc(40);