2012-04-19 3 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는 어디에서 해제 되나요? –

+1

'..'로 대체 한 내용은 무엇입니까? 거기에 어떤 기회에'return' 문이 있습니까? –

+0

거기에는 반환이 없으며 AudioBufferList가 해제되지 않았습니다. 할당 된거야? – user1280535

답변

0

bufferList을 놓친 것 같습니다.

+0

감사합니다. 내가 어떻게 풀어 줘? "무료"또는 출시 "? – user1280535

+0

누구나?이 줄은 괜찮습니까? : int16_t * q = (int16_t *) (& bufferList) -> mBuffers [0] .mData; 또는 릴리스 필요? – user1280535

+0

스택에 생성 된 :'AudioBufferList bufferList;', 버퍼 :'AudioBuffer buffer; '와 같으므로'free()'할 필요가 없습니다. – alk

관련 문제