
一个程序运行时将从操作系统取得一部分存储空间(大小不是无限的),用于保存其代码和数据。
用于数据存储的空间里包含一部分动态存储区,由程序里的动态存储管理系统管理。
在这个程序的运行期间,所有动态存储申请都由这块空间里分配。程序代码中释放存储,就是将不用的存储块交还给动态存储管理系统。
在C语言中,最好不要使用动态内存分配,在迫不得已一定需要使用时,需要格外小心,下面是一些注意事项。
1、注意检查内存是否分配成功
动态内存分配不一定百分百成功,因此需要检查是否成功分配内存,并考虑内存分配失败时的处理。通常的写法是:
if (NULL == (p = (...*)malloc(...)))
{
/* 内存分配失败时的处理 */
}

检查内存是否分配成功
2、检查使用是否越界
系统对所分配存储块的使用完全不进行检查,写程序的人需要保证使用的正确性,不能对超出实际存储块的范围进行访问。
内存越界:向系统申请一块内存,在使用的这块内存的时候,超过出了申请的范围。

内存越界示例
3、及时释放不再使用的块
如果在函数某个位置分配了一个块,当变量不再使用时,程序不会自动释放这个块,一定要通过free及时释放这个块。
malloc和free是成对出现。

free函数
4、防止动态分配块的丢失
例如一个指向动态块的指针又被赋了其他值,如果动态块没有其他访问路径,那么就无法找到它了。
相关阅读
动态内存分配介绍
C语言的内存分配方式:堆和栈
C程序中常见的与内存相关的错误
