野指针、悬空指针、空指针和内存泄漏是内存管理中四个重要概念。
野指针:指针变量未被初始化,或者被赋予了一个随意的、无效的地址值。它指向的内存区域可能是随机的,使用野指针会导致程序出现不可预测的行为,如程序崩溃或数据损坏
悬空指针:指针原来指向的内存已经被释放(例如通过free函数),但指针本身没有被置为NULL,仍然保存着之前内存的地址。再尝试访问这个指针所指向的已释放内存,就会产生错误。
空指针:一个特殊的指针值,它不指向任何有效的内存地址。C语言中通常用NULL表示,可用于初始化指针变量,或者在指针不指向有效地址时作为一个明确的标识。对空指针进行解引用操作是不允许的,会导致程序出错。
内存泄漏:指程序在动态分配内存(例如使用malloc、calloc等函数)后,没有释放这些内存,导致这些内存块在程序运行过程中一直被占用,无法被操作系统重新利用。随着程序的运行,内存泄漏会逐渐消耗系统内存,导致程序性能下降甚至系统崩溃。
总结,野指针和悬空指针指向无效内存(通常可以统一称为野指针),空指针则明确不指向任何内存,而内存泄漏则是未释放的有效内存,三者均可能导致程序错误和性能问题。
野指针代码示例
#include <stdio.h>
int main() {
int *wild_ptr;
// 没有初始化wild_ptr,它是野指针
// 下面这行代码可能会导致错误&