objective c - iPhone AVAudioPlayer release EXC_BAD_ACCESS -


i play sound making this:

nsdata *data = [nsdata datawithbytesnocopy:buffer length:length freewhendone:no]; avaudioplayer *player = [[avaudioplayer alloc] initwithdata:data error:nil]; 

in buffer have sound aac format. ok, until want release it, , not exc_bad_access

i release in way:

[player release]; free (buffer); 

i think player stil wants data, data not longer exist after make free (buffer);

but don't know when make free (buffer). if remove line ok. when remove free (buffer) have memory leaks:(

best regards chudziutki

(when putting code in question, put 4 spaces in front of line of code format code. inline code needs surrounding little quote marks this.)

if have crash, there backtrace.

from symptoms, apparently freeing buffer before avaudioplayer done it. need make sure audio player entirely done buffer before free memory.

likely, effective solution like:

buffer = malloc(...); .... fill buffer .... nsdata *data = [nsdata datawithbytesnocopy:buffer length:length freewhendone:yes];      avaudioplayer *player = [[avaudioplayer alloc] initwithdata:data error:nil]; ... let player play ... 

then, when want buffer deallocated, stop , release player:

[player stop]; [player release]; player = nil; // not necessary, prevents dangling pointer if player ivar , isn't -dealloc 

that is, let audio player take ownership of memory , responsibility free()ing when done.


Comments

Popular posts from this blog

php - What is the difference between $_SERVER['PATH_INFO'] and $_SERVER['ORIG_PATH_INFO']? -

fortran - Function return type mismatch -

queue - mq_receive: message too long -