2011-07-31 67 views
0

我有10個custome對象存儲在數組中。這是我的代碼。 facebook_wallDataArray是NSMUtable數組。在從客戶對象中獲取數據時出錯EXC_BAD_ACCESS

for(int i=0;i<10;i++) { 
    FacebookWallData* wallPost=[[FacebookWallData alloc]init]; 
    [email protected]"Wall Values"; 
[facebook_wallDataArray addObject:wallPost]; 

      [wallPost release]; 
} 

現在我有一個函數,它將對象值存儲在TableView Array中。我在這裏調用函數。

for(int i=0;i<10;i++) { 
[self faceboookDisplay:i] 
} 

這裏是我的功能體。

-(void) facebookDisplayFunction:(int)atIndex { 

    FacebookWallData* wall=[[FacebookWallData alloc]init]; 

    wall=[facebook_wallDataArray objectAtIndex:atIndex]; 

     [tableList addObject:wall.messages]; 
    [wall release]; 
} 

但是我的程序崩潰了EXC_BAD_ACCESS異常。我沒有得到我的代碼錯在哪裏? facebook_wallDataArray存儲這樣的值。它是NSMUtableArray。

"<FacebookWallData: 0x4c52ee0>", 
"<FacebookWallData: 0x4c52df0>", 
"<FacebookWallData: 0x6828300>", 
"<FacebookWallData: 0x6826d50>", 
"<FacebookWallData: 0x4e25a10>", 
"<FacebookWallData: 0x9317c60>", 
"<FacebookWallData: 0x4c53190>", 
"<FacebookWallData: 0x4e47e90>", 
"<FacebookWallData: 0x4c53380>", 
"<FacebookWallData: 0x93176e0>", 

感謝

回答

1

您創建一個新的walldata對象,但你得到該數組中的一個。所以,你失去了指向剛剛創建的一個(內存泄漏)並釋放從一個NSArray的自動釋放對象=>崩潰

而是執行此操作:

-(void) facebookDisplayFunction:(int)atIndex 
{ 
    FacebookWallData* wall = nil; 
    wall = [facebook_wallDataArray objectAtIndex:atIndex]; 
    [tableList addObject:wall.messages]; 
} 

E:另一件事,你是靜態循環10次,我認爲如果你使用數組的數量會更好,如果數組的大小發生變化,但你忘記更改for循環中的數字,那麼你將得到一個異常,這會破壞你的應用程序。

+0

我改變了代碼,但現在我正在調用EXC-BAD_ACCESS函數。在這一行「[self facebookDisplayFunction:i];」。我也將靜態數字更改爲數組數。 –

+0

whenevr我想一次又一次地調用函數,它是拋出除外。 –

+0

然後你再次釋放一些東西,你需要手動釋放東西的唯一地方是在第一個循環中,而不是在它之後的那個循環 –