写C C++ 语言时候,如果每次申请内存就把Free内存的代码写上,是否能有效避免内存泄漏?
2022-09-14
2 阅读
这个做法是无效的,说明你对相关问题实践少,凭空想象的措施。
首先,既然程序用到堆内存,就意味着不大可能在函数结束後要释放,它要被别的函数使用,否则你直接用栈内存好了。
既然会被别的函数使用,你也不可预知被应在哪个函数中释放它,这才是问题!在不该释放的时候释放了,後面的就用了幻影数据,甚至破坏程序和数据(此内存已被挪为他用时)。
函数是反复调用的,你不知道它会被调用多少,嵌套多少层,所以不可能确定在什么时候释放相关内存。
其次,是指针会让你这种想法焦头烂额。
一块内存的地址,可以用无数指针记忆指向和使用,你free这个指针,但它的化身仍然指向这块内存,它们不知道内存已释放(这就是尽量用引用而不是用指针的原因)。
第三,频繁释放内存会造成内存碎片,而你无法归集。