我有一個NSString,我試圖釋放。EXEC_BAD_ACCESS當我嘗試釋放具有分配給它的地址的NSString時
問題是,在某些情況下,當我嘗試釋放它時,我得到了EXC_BAD_ACCESS
。 NSString有一個地址分配給它(我可以在底部看到它已經分配了內存0xABCDEF)。
如何避免這個問題,而在有東西的時候再出售?
我有一個NSString,我試圖釋放。EXEC_BAD_ACCESS當我嘗試釋放具有分配給它的地址的NSString時
問題是,在某些情況下,當我嘗試釋放它時,我得到了EXC_BAD_ACCESS
。 NSString有一個地址分配給它(我可以在底部看到它已經分配了內存0xABCDEF)。
如何避免這個問題,而在有東西的時候再出售?
您可以釋放一個對象,但指向它的指針仍然可以有值。它只是它的垃圾值(即dangling pointer)。
這就是爲什麼你看到很多代碼,如:
[myObject release];
myObject nil;
它首先釋放對象,然後將指針nil
。這樣,任何發送給它的消息都將默默地失敗(因爲可以安全地將消息發送到Objective-C中的nil
對象),而不是像應用程序中發生的那樣崩潰。
既然你正在檢查指針,我懷疑你正在做內存管理奇怪的事情。別。只要按照Memory Management Rules,只發布你擁有的物體。
+1我通常會創建一個宏,如下所示:'#define SXRelease(obj)[obj release]; obj = nil'。 ''free()':'#define SXFree(ptr)free(ptr); ptr = NULL'。 – 2011-08-03 10:22:53
你有一個錯誤,並將var設置爲nil只是掩蓋它。更好地使用Malloc Scribble for Development構建和修復該錯誤。 – hooleyhoop
您可能在已發佈的字符串上調用了[release]
。你怎麼分配它?當一個對象被釋放或自動釋放時,它不會自動設置爲零(0x0)。
[[NSString alloc] initWithSomething]
需要發佈呼叫。
[NSString stringWithSomething]
沒有,按照慣例,它是autoreleased。
無法找到NSString的文檔中的「initWithSomething」。
你可以給一些代碼片段.. Bcz這可能是由於許多pbm像你沒有保留像tat –
檢查你是否釋放它兩次.... – booleanBoy