2011-06-29 39 views
-7

我有一個linux產品的三行(版本)。 V1在客戶中運作良好。 V2和V3 崩潰,並且修復似乎是malloc調用後的memset調用。malloc後的memset

關於此主題的更深入的解釋是什麼?爲什麼memset解決了這個問題?

+4

顯示一些代碼。 – cnicutar

+0

我的車壞了,似乎在我啓動後它不起作用。我的朋友有同樣的車,它不會中斷。有什麼問題? - 請添加一些代碼,我們不是先知。 –

+0

@cnicutar在V1中有沒有碰撞? – cateof

回答

3

沒有代碼示例的我的猜測是,您正在使用malloc'd的緩衝區或結構,並假定它的內容將使用某些默認值進行初始化。 Malloc不會初始化它回手的內存,所以除非你使用memset或者使用其他初始化,否則這個內存中的值可能是任何東西,因此,如果你試圖檢查一個指針,假設它是NULL或者一個int值將爲零,如果不先初始化內存,則不能進行該假設。

+0

謝謝。你的猜測對我有幫助。 – cateof

2

也許是因爲分配的緩衝區被歸零的錯誤設想。因此,例如,如果緩衝區包含字符串並在初始化之前打印到某處,則可能導致訪問衝突。清零緩衝區可以解決這個問題。