2013-04-08 69 views
0

我正在開發一個Objective-C(iOS)應用程序,它在應用程序的基於C的部分中使用非常大的數組(大小> 10000)。已分配內存的分配

在執行的時刻,使一個小結構我提出的一個malloc,我有消息:

 malloc: *** error for object 0x6505a4: incorrect checksum for freed object - object was probably modified after being freed 

由消息給出的ADRESS已被使用由陣列我在此之前使用的電話:

write in address : 0x6505a0 - im_x[12] // im_x is my array 
write in address : 0x6505a8 - im_x[13] // im_x is my array 

爲什麼iOS會嘗試分配已使用的內存?

歡迎任何幫助:)

謝謝!

+3

iOS不會嘗試分配使用中的內存。代碼中會有一個導致此錯誤的錯誤。你可以創建一個最小的測試用例並編輯你的問題來包含該代碼嗎? – simonc 2013-04-08 10:55:17

+0

你如何創建你的數組? – 2013-04-08 11:05:42

+0

斯蒂芬說什麼;我敢打賭一美元,你超越了數組的末尾。 – bbum 2013-04-08 14:45:59

回答

0
malloc: *** error for object 0x6505a4: incorrect checksum for freed object - object was probably modified after being freed 

是一個消息,告訴我你損壞了堆的數據結構(緩衝區溢出,下溢,一些其他奇怪的魔法)。

嘗試用valgrind調試程序(如果這是一個選項),或者如果不嘗試與隔離Valgrind的內存curruption可疑代碼並調試它,你必須有地方會覆蓋任何地方一些esential數據結構的錯誤。

到堆中

在這裏解釋這個奇怪的錯誤消息是一些有趣的ASCII藝術

  • F:免費塊/字節
  • L:內存管理結構

    FFFFFFFF

現在的應用程序分配一些內存的兩倍(A和B)

我們得到類似

AMBBBMFF 

,如果我們能在這裏寫在內存

AMBBBMFF 
^ 
here 

我們currupt的的數據結構堆,並且因爲A或B的校驗和是錯誤的,所以它發出錯誤消息。

-2

如果你的程序有很多malloc,它可以重新限制你的程序專用的內存。當你不再需要時,你可能會釋​​放記憶。嘗試增加程序內存限制。

+3

這不回答問題... – 2013-04-08 11:02:18

0

謝謝大家,我發現我的問題:

一個算法要求有一個特殊的尺寸,並沒有測試它(這不是我自己的代碼),所以它所著拉出陣列。