| void *malloc(size_ size(要开辟多大,单位为字节)); 1.如果开辟成功,返回一个指向开辟好空间的指针,如果开辟失败,返回一个NULL指针,因此malloc的返回值要做检查。 2.malloc的返回类型是void*类型,所以我们要想好开辟什么类型的空间。 3.是在堆上开辟的空间。 |
| void free(void *ptr(要释放空间的地址)) 1.free函数是专门用来释放或回收动态内存的。 2.如果开辟了动态内存,在使用完这一部分空间,必须要用free函数来释放,否则会出现内存泄漏。 3.如果参数是NULL,则函数什么事也不做。 |
例:
calloc| void *calloc(size_t num(要开辟多少个元素),size_t size(每一个元素多大)); 1.calloc与malloc一样也是动态内存分配的。 2.与malloc不同的是,calloc会将开辟出来的空间进行初始化,将每一个字节初始化为零,而malloc不会初始化。 |
| void *realloc(void*p(要调整空间的地址),size_t size(需要调整为多少个字节)); 1.realloc是用来调整申请内存空间的大小的。 2.返回值是调整之后的内存起始位置。 3.realloc在调整内存空间的时候会出现两种情况: 情况二:原有空间的后面没有足够大的空间 当是情况一的时候,要扩展的内存就直接在原有内存之后追加空间,原来空间的地址不变。 当是情况二的时候,原有空间之后没有足够的空间,扩展的方法是在堆的另一块内存找一个合适的空间来使用。这样函数返回的是一个新的内存地址。 |
例:
常见的动态内存错误 1.对NULL指针的解引用操作如果动态内存申请失败,没有判断NULL这个步骤,就会对NULL解引用操作。
2.对动态开辟空间的越界访问 3.对非动态开辟内存使用free释放会卡死。
4.使用free释放动态内存的一部分5.对同一块动态内存多次释放
6. 动态开辟内存忘记释放(内存泄漏)



