指针是C语言最强大的特性之一, 但也是最危险的特性之一: 误用指针导致的错误通常难以定位, 且后果严重. 常见的内存异常错误主要有两类, 一类是非法内存访问错误, 即代码访问了不该访问的内存地址; 另外一类是由于持续的内存泄漏导致系统内存不足, 编译器往往不易发现这类错误, 在程序运行时才能捕捉到: 这类错误通常是时隐时现的, 这就进一步增加了对这类错误的排错难度. 下面我们就来介绍一些常见的内存错误及其解决对策.

前四种错误都属于内存非法访问错误, 即代码访问了不该访问的内存地址. 在现代操作系统严格的进程管理体系下, 非法内存访问的结果大多时候是不会引起诸如死机、硬盘冒烟、显示器爆炸这样极端严重的后果的. 一般而言, 这类错误要么产生莫名其妙的结果, 要么是操作系统友好地宣告你的程序得了不治之症, 是接受安乐死的时候了.

下面首先来看第一类常见的内存错误.


在申请动态内存时, 找不到足够大的内存块, 说明系统内存此时已经耗尽, 相应地内存申请操作就会失败. 系统宣告内存申请失败的方法是让malloc函数返回一个空指针. 我们可以在使用动态申请的内存前通过检查malloc函数的返回值来应对该问题: 一旦发现malloc函数返回的是空指针, 就用exit函数立即结束程序的运行. 如果是在一个函数内申请动态内存, 也可以用return语句终止这个函数的执行: 如果这个函数内的其他地方也申请了动态内存, 这种从函数返回的方式就显得有些力不从心了——在用return语句从函数返回之前, 必须要将已经申请成功的内存全部释放掉才能从函数返回. 一般来说,

标签: 内存, 函数, 访问, 指针, 错误, 申请, 对策

相关文章推荐

添加新评论,含*的栏目为必填