目录
1.malloc
malloc在msdn中的描述为Allocates memory blocks.我们可以向该函数传入一个值n,然后malloc函数就会在堆区申请一个n个字节的空间。
void *malloc(size_t n)
2.calloc
calloc的描述为Allocates an array in memory with elements initialized to 0.根据描述我们可以看出calloc在申请空间时会将该空间初始为0。而它需要的参数为:n-要被分配的元素个数,m-元素的大小。
void *calloc(size_t n, size_t m)
3.realloc
而realloc的描述为Reallocate memory blocks.它的作用就是重新调整之前调用 malloc 或 calloc 所分配的 ptr 所指向的内存块的大小。n为内存块的新的大小(可以调大也可以调小),以字节为单位。如果大小为 0,且 ptr 指向一个存在的内存块,则 ptr 所指向的内存块会被释放,并返回一个空指针。
void *realloc(void *ptr, size_t n)
他们的返回值都为void*的指针指向分配的空间,使用时应注意要把void*强制转换为所需要的的类型,但如果分配失败则会返回NULL。
在使用完这些空间后,我们应及时用free释放掉这些空间,并将ptr赋值为NULL,以防止产生内存泄漏和野指针。
4.new
new是c++中的关键字,而以上这些是c语言中的库函数,使用时需要引用头文件。
new和delete是用户进行动态内存申请和释放的操作符,operator new 和operator delete是系统提供的全局函数,new在底层调用operator new全局函数来申请空间,delete在底层通operator delete全局函数来释放空间。
如果用申请的是内置类型的空间,那么new和malloc,delete的free的功能类似,但是new申请空间失败会抛异常,而malloc申请失败会返回NULL。
如果是释放自定义类型的数组时未表明是数组就会报错,而释放内置类型的数组时虽然不会报错,但是不推荐使用,所以delete数组时最好写上[ ]防止报错。