它们两个都是关于内存的操作:
内存的使用的正确逻辑:区分这个时候存在应用程序、系统两个之前的关系和区别,不是同一个东西;
正常使用一个变量的内存操作过程:
:当程序向系统申请一块内存空间时候,程序会把申请号好的这块内存空间的首地址赋给变量a,假设变量a拿到的首地址是0x3456,那么当这块空间使用完成被free释放了之后,这块空间的使用权又被程序还给了系统。 并且将指针变量赋值给Null,置位NULL的时候;
内存泄露:
当变量a申请一块内存的时候, 需要malloc函数去分配内存空间,这样变量就可以使用了,当时使用完成了之后,也就是这个变量已经销毁了,但是它对应的a内存并没有释放,这个时候a对应的内存所有权还是归为应用程序,所以,这个内存不会被其他的变量所访问。系统并没有获得这个变量的所有权;所以这个内存就相当于"占着茅坑不拉屎";这样就浪费了内存,导致可以使用的内存也来也少: ++++> 内存泄露 : 需要释放内存空间;
所谓的泄露: 指的是内存记录上可以使用的内存的记录缺少了这一块,这一块本来是应该在记录里面的。
野指针:
当变量a申请一块内存的时候, 需要malloc函数去分配内存空间,这样变量就可以使用了,当时使用完成了之后,也就是这个变量已经销毁了,对应的a内存已经释放,应用程序将这块内存的所有交回给了系统,但是变量a所获得的内存地址还是原来的了对应的内存地址,并没有置位NULL;导致我们再次使用a这个变量的时候,应用程序并没有获得访问这个地址的所有权,或者说这个变量已经不能够访问了。 野指针 : 需要将变量所指向的地址为NULL;
【也就是交给系统的时候,但是指向这边地址的变量还没有置位NULL,在多线程的时候,有可能这个时候访问了这个变量的地址,这样就会造成野指针】
参考链接:
https://blog.csdn.net/sheep_and_stone/article/details/51356444
网友评论