void * malloc(size_t size);
分配内存块
分配一块大小为字节的内存块,返回一个指向块开始的指针。
新分配的内存块的内容未被初始化,并保留不确定的值。
如果大小为零,则返回值取决于特定的库实现(它可能是或不可能是空指针),但返回的指针不应被解除引用。
void free(void * ptr);
取消分配内存块
先前由呼叫分配的一块内存的malloc,释放calloc 要么的realloc被释放,使其可用于进一步分配。
如果ptr没有指向使用上述函数分配的内存块,则会导致未定义的行为。
如果ptr是一个空指针,该函数什么也不做。
注意这个函数不会改变ptr本身的值,因此它仍然指向相同(现在无效)的位置。
void * calloc(size_t num,size_t size);
分配并初始化数组
为num元素数组分配一块内存,每个元素的大小都是字节长,并将其所有位初始化为零。
有效的结果是分配一个零初始化的(num*size)字节内存块。
如果大小为零,则返回值取决于特定的库实现(它可能是或不可能是空指针),但返回的指针不应被解除引用。
void * realloc(void * ptr,size_t size);
重新分配内存块
更改由ptr指向的内存块的大小。
该函数可能会将内存块移到新位置(其地址由函数返回)。
即使将块移动到新位置,内存块的内容也会保留为新旧尺寸中较小的一个。如果新尺寸较大,则新分配的部分的值不确定。
如果ptr是一个空指针,该函数的行为就像的malloc,分配一个大小为字节的新块并返回一个指向其开始的指针。
#include <stdlib.h>
int main ()
{
int * buffer1, * buffer2, * buffer3;
buffer1 = (int*) malloc (100*sizeof(int));
buffer2 = (int*) calloc (100,sizeof(int));
buffer3 = (int*) realloc (buffer2,500*sizeof(int));
free (buffer1);
free (buffer3);
return 0;
}