2012-04-19 62 views
0

我在xcode儀器中看到了內存增長,所以在嘗試消除問題後,我已經看到在我的音頻緩衝區回調方法中存在一段代碼,當我擦除時,問題是解決了。 所以,這個回調會發生很多次第二,並導致增長:檢測內存增長

static OSStatus recordingCallback(void *inRefCon, 
             AudioUnitRenderActionFlags *ioActionFlags, 
             const AudioTimeStamp *inTimeStamp, 
             UInt32 inBusNumber, 
             UInt32 inNumberFrames, 
             AudioBufferList *ioData) 
    { 


     AudioBuffer buffer; 

     buffer.mNumberChannels = 1; 
     buffer.mDataByteSize = inNumberFrames * 2; 
     //NSLog(@"%ld",inNumberFrames); 
     buffer.mData = malloc(inNumberFrames * 2); 
     // Put buffer in a AudioBufferList 
     AudioBufferList bufferList; 
     bufferList.mNumberBuffers = 1; 
     bufferList.mBuffers[0] = buffer; 



     OSStatus status; 
     status = AudioUnitRender(audioUnit, 
           ioActionFlags, 
           inTimeStamp, 
           inBusNumber, 
           inNumberFrames, 
           &bufferList); 
.. 
.. 
.. 
free(buffer.mData); 

你能在這裏看到一些行可能會導致? buffer.mdata是免費的。 還有別的東西,我不自由,這是越來越多。

謝謝。

+0

你的AudioBufferList在哪裏被釋放? – 2012-04-19 14:01:50

+1

你用'..'代替了什麼?每個機會中有沒有「回報」聲明? – 2012-04-19 14:04:53

+0

那裏沒有返回,並且AudioBufferList沒有被釋放。它被分配了嗎? – user1280535 2012-04-19 14:12:45

回答

0

看起來你忘了發佈你的bufferList

+0

謝謝。我怎麼釋放他? 「免費」或釋放「? – user1280535 2012-04-19 14:13:21

+0

任何人?這一行是好嗎?:int16_t * q =(int16_t *)(&bufferList) - > mBuffers [0] .mData;?或需要發佈? – user1280535 2012-04-19 14:50:42

+0

對我來說,它看起來像它創建在堆棧上:'AudioBufferList bufferList;',對於緩衝區:'AudioBuffer緩衝區;'是一樣的,所以不需要'free()'。 – alk 2012-04-19 15:02:18