I have created an example of my class: https://github.com/ChoadPet/H.264-Decoding
When I build my application with DEBUG
configuration everything is working fine, but when I archive RELEASE
it's crashing on this line:
let status = VTDecompressionSessionDecodeFrame(session,
sampleBuffer: sampleBuffer,
flags: defaultDecodeFlags,
frameRefcon: nil,
infoFlagsOut: nil)
With Address Sanitizer
enable I got this error:
Thread 9: Use of deallocated memory
SUMMARY: AddressSanitizer: heap-use-after-free
(.../Frameworks/libclang_rt.asan_ios_dynamic.dylib:arm64+0x1a1f4) in wrap_memmove
...
(if you need more crash info, let me know)
Without: Thread 12: EXC_BAD_ACCESS (code=1, address=0x107dd0020)
I do understand that there is some memory that was freed and it accesses by VTDecompressionSessionDecodeFrame
method, but I can't find any address with hex, and I don't understand how this is working perfectly with the DEBUG
build.
Before this method, session
and sampleBuffer
are successfully created(initialized).
Is there are some project settings I can change to DEBUG configuration
which can cause the crash? Or somebody can point me out on a code issue?
Thank you!
Changing
Optimization Level
for Release archive to the same as for Debug -No Optimization[-Onone]
hide the problem, but changing build configuration is not the right way to resolve this kinda problem. Also, the problem was not exactly insampleBuffer
. The problem was inblockBufferOut
parameter, which goes intosampleBuffer
later. I will update the repo source code, so the community can see changes clearly.So I had before this logic:
Summary: if you operate on bufferPointer, do all operations inside a closure.