2013-12-23 83 views

回答

3

經常內存泄漏將導致崩潰。如果你在嘗試之前從未用C編碼過。你將學到很多關於內存分配和訪問的知識。有趣的時刻,當你剛剛開始。

在C相比一些語言,你必須告訴計算機何時你想要的內存和多少。當你不需要記憶時,你必須告訴它。所以,如果你想要一個8字節的數組,那麼你不得不說,你需要這些8字符的內存。如果你忘記告訴計算機你不再需要內存,那麼它將不會被釋放。這是一個內存泄漏。如果你這樣做了很多,那麼你可能會耗盡內存。

int main() 
{ 
    int strLength = 10; 
    // Lets ask for some memory for a string 
    char *str = (char *)malloc(sizeof(char)); 
    for (int i=0; i<strLength; i++) 
    { 
     str[i] = 'a' + i; 
    } 
    str[strLength-1] = 0; 
    // This should print "abcdefghi" 
    printf(str); 
    // We should run this to free memory: free(str); 
    return 0; 
} 

上面看起來不那麼糟糕,但如果你在一個循環做到這一點,那麼你可以迅速開始使用大量的內存。

至於安全性:如果泄漏是像防火牆一樣的東西,泄漏可能會導致它崩潰,那麼這是一個安全問題。

1

作爲wikipedia webpage說,

在計算機科學中,當一個計算機程序 不正確地管理存儲器分配發生內存泄漏。 1在面向對象的 編程中,當對象存儲在內存中但運行代碼無法訪問對象時,可能會發生內存泄漏。 2內存泄漏 的症狀類似於其他一些問題(請參見下文),並且 通常只能由程序員通過訪問 程序進行診斷。

而且在計算器的memory-leaks tag表明,當一個程序無法釋放內存分配給它的,但不再使用出現

內存泄漏。

根據您的問題,如果它是一個安全問題或性能問題,我會說這兩個,因爲一旦發生了內存泄漏,在大多數情況下,程序不應該能夠繼續運行,並被迫停止。

按照memory-leaks tag所示,內存泄漏發生在節目

可以潛在地迅速導致系統是無法分配爲其他程序存儲器(甚至本身)導致性能不佳和非預期的故障。在一些不太現代的環境中,內存泄漏有能力意外崩潰系統,這可能導致其他問題。

1

在舊的軟件中,一切都是固定的大小,像字符串緩衝區等。內存泄漏很少,但是能力有限制。

現在最現代的軟件管理分配的內存。您爲一個字符串或文件或任何其他內容請求一塊或一塊內存,當您完成它時,您將它還給(通常是操作系統或任何叫你的人)。例如,假設你需要吸入一個文件來處理,你或你的函數就會計算出需要多少空間,並且要求一個大的塊。或者,如果你只是想簡單地通過將兩個其他字符串連接在一起來構建一個字符串,比如$ new ='old'+'er',則會爲$ new字符串分配一小塊內存。

因此回到當你完成它時回憶回憶的問題。例如,較新版本的PHP具有所謂的引用計數器,即使您忘記了,也可以讓軟件返回內存。

但是我所見過的一些軟件(大多是較老的軟件)是,如果遇到錯誤,並且陷阱完成從錯誤中恢復,那麼在忘記給出的代碼中可能會出現錯誤你通常會回饋內存,這會產生所謂的內存泄漏,或分配的內存,但不能重複使用,因此重新制定泄漏時會逐漸增加內存大小。

在較低級別的代碼中,此泄漏可能導致程序通過導致崩潰而癱瘓本身或其他人。

內存泄漏可能會在奇怪的時間引起奇怪的錯誤,這與實際發生錯誤的時間看似無關。就像你可能有一個程序運行一週,每天都在做同樣的事情,並突然失敗。

因此,如果健壯性是性能,那麼內存泄漏就是性能問題。如果它可能導致軟件崩潰,那可能是一個安全問題。幾年前,我有一位朋友闖入了主要的大學服務器,因爲他發現了一個會崩潰並提供機會的窗口。