簡體   English   中英

它是以下C代碼中的內存泄漏嗎?

[英]Is it a memory leak in the following C code?

它是流動的C代碼中的內存泄漏嗎?

 #include <stdlib.h>
 int *a;

 int main() {
      a = malloc(sizeof(int)*10);
      return 0;
 }

至少大多數人使用這個術語的方式,答案是肯定的 - 程序分配的任何內存從未被釋放被視為泄漏。

與此同時,大多數人主要關注漸進式泄漏 - 在程序運行時可能/將逐漸泄漏更多內存,例如在循環內進行分配,以及無法釋放內存。

特別是對於真正需要一些內存以便在程序的整個生命周期中保持分配的東西,在退出之前釋放和離開分配直到退出完成之間的區別之間的區別變得更像是分裂的問題而不是真正有用的區別。 有些人認為分配內存是一種諷刺,即使它只是在退出之前立即釋放。 其他人將其視為浪費代碼(以及對錯誤的邀請)以在退出之前立即釋放內存(當任何設計合理的操作系統將重新獲得進程的資源時)。

由於程序一旦分配就退出,那么linux(或windows)會自動free那個內存空間,所以沒有泄漏,但你在malloc之后做了一些事情,在程序結束之前就會出現泄漏

這將由valgrind和Intel Inspector報告為內存泄漏,因為未釋放分配的內存。 但是,這可能不會對程序產生影響。

如果在程序退出之前需要分配的內存,則可以避免此泄漏警告。 但設計必須指明不釋放不會導致其他問題,如內存不足。 例如,可能存在一些控制器對象的單例實例,只要程序運行就必須存在。

但是,如果這樣的分配丟失而且從未使用過,設計也不考慮它們,那么它絕對是一個泄漏。

現在,在您的情況下,這個分配的內存不用於何處。 因此,這種分配必須被視為泄漏。

當程序退出時,OS可能會占用所有內存。 當應用程序必須運行很長時間(如服務器應用程序)並且將存在很長時間並且將來會有大量維護時,這不應該被視為理所當然。

是的,程序中存在內存泄漏。 你正在分配一個大小為10 * 4的內存[考慮int需要4個字節]並且你沒有釋放內存。 為避免內存泄漏,您必須釋放已分配的內存。

    #include <stdlib.h>
    int *a;

    int main()
    {
         /* allocating the Memory */
         a = malloc( sizeof (int) *10 );
         /* free the allocate memory */
         free ( a );
         return 0;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM