diff --git a/libavcodec/options.c b/libavcodec/options.c
index b68c30015285b405d9ca91c6fb53c1558828e826..02fb89f5cb4edc1aeb1a70059dba262a42d3504a 100644
--- a/libavcodec/options.c
+++ b/libavcodec/options.c
@@ -190,6 +190,10 @@ int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src)
                src, dest);
         return AVERROR(EINVAL);
     }
+
+    av_opt_free(dest);
+    av_free(dest->priv_data);
+
     memcpy(dest, src, sizeof(*dest));
 
     /* set values specific to opened codecs back to their default state */