void *malloc(size_ size(要开辟多大,单位为字节));
1.如果开辟成功,返回一个指向开辟好空间的指针,如果开辟失败,返回一个NULL指针,因此malloc的返回值要做检查。
2.malloc的返回类型是void*类型,所以我们要想好开辟什么类型的空间。
3.是在堆上开辟的空间。
void free(void *ptr(要释放空间的地址))
1.free函数是专门用来释放或回收动态内存的。
2.如果开辟了动态内存,在使用完这一部分空间,必须要用free函数来释放,否则会出现内存泄漏。
3.如果参数是NULL,则函数什么事也不做。
例:
callocvoid *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. 动态开辟内存忘记释放(内存泄漏)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)