内存泄漏与野指针

原文链接: https://blog.csdn.net/sheep_and_stone/article/details/51356444

内存泄漏

当你要为变量a申请一块内存空间的时候,需要用到malloc函数。如何申请这块内存空间呢?这就变成程序的工作了。程序首先会向系统申请一块内存空间,然后程序会把申请好的这块内存空间的首地址赋给变量a,假设这时候变量a拿到的首地址为0x1234,如果我们现在要对变量a进行循环操作,那么每循环一次,变量a就会拿到一个新的首地址,这样的话,内存空间就会被不断的分配给变量a。

但是现在要注意的是每拿到一次新的首地址,旧的首地址就会被覆盖,但是旧的内存空间的使用权依然在程序手里。这里要分清楚两个概念,系统和程序。通常情况下,是由程序向系统申请空间,空间的分配权在系统手里。虽然旧的地址呗覆盖,但是使用权依旧掌握在程序手中,所以,程序能使用的空间越来越少,最终导致内存不够而泄露。

野指针

当程序向系统申请一块内存空间时候,程序会把申请号好的这块内存空间的首地址赋给变量a,假设变量a拿到的首地址是0x3456,那么当这块空间使用完成被free释放了之后,这块空间的使用权又被程序还给了系统,但是这个时候如果没有给变量a赋NULL值,那么变量a手里拿到的依旧还是这个首地址0x3456,这个地址是没有被销毁的,所以既然它有一个首地址,那么就可以指向一个地址,但是,由于这个地址所在的内存空间的使用权已经不属于程序,因此,这个时候变量a的指向操作就是不合法的,这样的指针就被称为野指针。

猜你喜欢

转载自blog.csdn.net/qq_34595352/article/details/102543183