diff --git a/libavformat/cafenc.c b/libavformat/cafenc.c
index 40ccd48c2d..11bb055965 100644
--- a/libavformat/cafenc.c
+++ b/libavformat/cafenc.c
@@ -238,11 +238,11 @@ static int caf_write_packet(AVFormatContext *s, AVPacket *pkt)
 
 static int caf_write_trailer(AVFormatContext *s)
 {
+    CAFContext *caf = s->priv_data;
     AVIOContext *pb = s->pb;
     AVCodecContext *enc = s->streams[0]->codec;
 
     if (pb->seekable) {
-        CAFContext *caf = s->priv_data;
         int64_t file_size = avio_tell(pb);
 
         avio_seek(pb, caf->data, SEEK_SET);
@@ -256,11 +256,11 @@ static int caf_write_trailer(AVFormatContext *s)
             avio_wb32(pb, 0); ///< mPrimingFrames
             avio_wb32(pb, 0); ///< mRemainderFrames
             avio_write(pb, caf->pkt_sizes, caf->size_entries_used);
-            av_freep(&caf->pkt_sizes);
             caf->size_buffer_size = 0;
         }
         avio_flush(pb);
     }
+    av_freep(&caf->pkt_sizes);
     return 0;
 }