2009-12-23 44 views
1

我正在開發一個圖像處理應用程序,將圖像轉換爲位圖。我正在操作位圖中的位以獲得所需的效果。 我第一次處理它提供了有關第二條的正確結果的圖像嘗試它給 EXC_BAD_ACCESSiPhone中的UInt8奇怪的問題(EXC_BAD_ACCESS)

調試器顯示:

dataref outofscope 

我的代碼是

CGImageRef img=previewImageView.image.CGImage; 
NSLog(@" Image : %@ ", previewImageView); 
CFDataRef dataref=CopyImagePixels(img); 
CFDataRef dataref1=CopyImagePixels(img); 
//UInt8 *data=(UInt8 *)CFDataGetBytePtr(dataref); 
//UInt8 *original=(UInt8 *)CFDataGetBytePtr(dataref1); 

UInt8 *data=nil; 
data=(UInt8 *)CFDataGetBytePtr(dataref); 
UInt8 *original=nil; 
original=(UInt8 *)CFDataGetBytePtr(dataref1); 
//original=data; 
int length=CFDataGetLength(dataref); 

請幫助... ......

+0

嗨,歡迎來到stackoverflow!下次在發佈之前先看看你的帖子預覽,看看它會是什麼樣子;) – 2009-12-23 12:34:14

+0

或者你可以等待某種靈魂來爲你修復它:-) – paxdiablo 2009-12-23 12:35:28

+0

調試器失敗了什麼?逐行執行代碼,直到失敗。在我們能夠充分幫助之前,我們需要知道這條線。 – TechZen 2009-12-23 13:37:24

回答

1

EXEC_BAD_ACCESS的一個主要原因是嘗試訪問發佈對象。

要了解如何解決此,請閱讀本文件:DebuggingAutoReleasePool

即使你不認爲你是「釋放自動釋放對象」,這將適用於您。

該方法工作得非常好。

總之,本文解釋瞭如何使用Cocoa的NSZombie調試類和命令行「malloc_history」工具來準確找到在您的代碼中訪問了哪個發佈對象。

在objc_exception_throw上設置斷點很有用。這樣調試器在你得到EXC_BAD_ACCESS時應該中斷。

說明可以在這裏找到http://www.cocoadev.com/index.pl?DebuggingTechniques