IOS開發:Program received signal: “EXC_BAD_ACCESS" 問題分析

解析:Program received signal: “EXC_BAD_ACCESS"


在練習時,有這麼段代碼:
    CALayer *sublayer = [CALayer layer];
    sublayer.backgroundColor = [UIColor blueColor].CGColor;
    sublayer.shadowOffset = CGSizeMake(0, 3);
    sublayer.shadowRadius = 5.0;
    sublayer.shadowColor = [UIColor blackColor].CGColor;
    sublayer.shadowOpacity = 0.8;
    sublayer.frame = CGRectMake(30, 30, 128, 192);
    [self.view.layer addSublayer:sublayer];
由於被書上的內存泄露嚇唬住了,所以又在最後追加了[sublayer release];來釋放內存而在程序調試運行退出時碰到了Program received signal: “EXC_BAD_ACCESS" 錯誤。經網絡搜索搞清楚了這個錯誤產生的幾個原因:

1、訪問受保護或者不存在的內存空間,導致返回了一個錯誤的指針;

2、訪問未進行內存分配或初始化的內存空間;

3、在對象被釋放後仍然採用原來的指針進行訪問;

4、採用了[object release]釋放對象,但其實對象並未採用 alloc/copy/retain 等形式進行內存分配;(這是我此次錯誤的原因)

5、其他不合法的內存訪問方式;
 
總之,對於常見的EXEC_BAD_ACCESS,EXC_BAD_INSTRUCTION,錯誤,一般都是因爲訪問已經被release的對象造成的。尤其是在一個線程中訪問另外一個線程的autorelease庫中的對象,尤其要注意此類問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章