objective c - releasing a NSMutableArray is causing EXC_BAD_ACCESS error -



objective c - releasing a NSMutableArray is causing EXC_BAD_ACCESS error -

so when seek run next code, end exc_bad_access error. happens when seek release nsmutablearray retrievedanalysisdatalist. array list of retrievedanalysisdata objects. if seek either release info list or if set init autorelease, same result. i'm kinda guessing has sorting section of code since don't have issue retrievedanalysisidarray.

any ideas?

if (tempdict != null) { nsmutablearray *retrievedanalysisdatalist = [[nsmutablearray alloc] init]; nsmutablearray *retrievedanalysisidarray = [[nsmutablearray alloc] init]; (id key in tempdict) { retrievedanalysisdata = [[retrievedanalysisdata alloc] init]; retrievedanalysisdata.createdate = [[tempdict objectforkey:key] objectforkey:@"createdate"]; retrievedanalysisdata.id = [[tempdict objectforkey:key] objectforkey:@"id"]; retrievedanalysisdata.mode = [[tempdict objectforkey:key] objectforkey:@"mode"]; retrievedanalysisdata.name = [[tempdict objectforkey:key] objectforkey:@"name"]; retrievedanalysisdata.numzones = [[tempdict objectforkey:key] objectforkey:@"numzones"]; retrievedanalysisdata.srcimg = [[tempdict objectforkey:key] objectforkey:@"srcimg"]; retrievedanalysisdata.type = [[tempdict objectforkey:key] objectforkey:@"type"]; //nslog(@"\n createdate: %@ \n id: %@ \n mode: %@ \n name: %@ \n numzone: %@ \n srcimg: %@ \n type: %@", retrievedanalysisdata.createdate, retrievedanalysisdata.id, retrievedanalysisdata.mode, retrievedanalysisdata.name, retrievedanalysisdata.numzones, retrievedanalysisdata.srcimg, retrievedanalysisdata.type); [retrievedanalysisdatalist addobject:retrievedanalysisdata]; [retrievedanalysisdata release]; } nssortdescriptor *sortdescriptor; sortdescriptor = [[[nssortdescriptor alloc] initwithkey:@"createdate" ascending:yes] autorelease]; nsarray *sortdescriptors = [nsarray arraywithobject:sortdescriptor]; nsarray *sortedretrievedanalysisdatalist; sortedretrievedanalysisdatalist = [retrievedanalysisdatalist sortedarrayusingdescriptors:sortdescriptors]; int count = [sortedretrievedanalysisdatalist count]; (int = 0; < count; i++) { retrievedanalysisdata = [[retrievedanalysisdata alloc] init]; retrievedanalysisdata = [sortedretrievedanalysisdatalist objectatindex:i]; [retrievedanalysisidarray addobject:retrievedanalysisdata.id]; [retrievedanalysisdata release]; } datacenter.sortedretrievedanalysisdatalist = sortedretrievedanalysisdatalist; datacenter.retrievedanalysisidarray = retrievedanalysisidarray; [retrievedanalysisidarray release]; [retrievedanalysisdatalist release]; datacenter.isretrieve = [nsnumber numberwithint:1]; [activityindicator stopanimating]; [picker reloadallcomponents]; picker.hidden = false; pickertoolbar.hidden = false; toolbar.hidden = true; innercircle.hidden = true; outercircle.hidden = true; tracklabel.hidden = true; displaygpslabel.hidden = true; }

your problem lies in section of code:

retrievedanalysisdata = [[retrievedanalysisdata alloc] init]; retrievedanalysisdata = [sortedretrievedanalysisdatalist objectatindex:i]; [retrievedanalysisidarray addobject:retrievedanalysisdata.id]; [retrievedanalysisdata release];

the first line allocates new retrievedanalysisdata, sec throws away (leaking it) , places object fetched array in retrievedanalysisdata variable instead. don't own object fetched array, , don't take ownership calling retain. release on 4th line incorrect, releasing object not own.

then when release nsmutablearray, tries release object 1 time again , crash because object released.

to prepare it, rid of useless first line, , rid of wrong release.

objective-c memory-management nsmutablearray

Comments

Popular posts from this blog

iphone - Dismissing a UIAlertView -

intellij idea - Update external libraries with intelij and java -

javascript - send data from a new window to previous window in php -