动态内存管理(上)-CSDN博客(malloc, realloc, calloc, free函数的用法以及注意事项等知识点)
目录
1.对空指针的解引用操作
2.对动态开辟空间的越界访问
3.对非动态内存开辟空间使用free空间释放
4.使用free释放动态开辟空间的一部分
5.对同一块内存的多次释放
6.动态内存空间忘记释放
另外动态内存管理因为涉及到了内存的问题, 所以很容易出错,本节回顾容易出错的点。
1.对空指针的解引用操作
这个问题通常出现在向堆区申请空间时, 假如空间不够, 返回空指针,如果没有进行判断的话, 就容易出现这种情况。 如:
这里就没有进行判断, 直接使用的话就会出问题。
2.对动态开辟空间的越界访问
3.对非动态内存开辟空间使用free空间释放
虽然c语言对于free释放非动态内存空间是未定义的。 但是这种用法是错误的。
通常我们在学习数据结构时, 使用栈或者队列的时候, 很容易混淆栈或者顺序表哪个先释放, 那个能释放。 存储栈的空间是不用释放的。 而栈所指向的动态内存开辟出的空间是需要释放的。
4.使用free释放动态开辟空间的一部分
注意这类问题容易忽略, free释放内存时, 是从指针指向位置开始,向后访问释放。所以假如一个指针不能指向想要释放空间的起始位置, 那么他就不能将空间进行全部释放。
5.对同一块内存的多次释放
6.动态内存空间忘记释放
导致内存泄漏的直接原因。 如果一个程序一直运行的同时只开辟空间,不释放空间。 那么内存很容易就不足。