diff --git a/libavformat/segment.c b/libavformat/segment.c
index 00e5881d5a..f35bbef8dc 100644
--- a/libavformat/segment.c
+++ b/libavformat/segment.c
@@ -662,8 +662,10 @@ static int seg_write_header(AVFormatContext *s)
     if (av_dict_count(options)) {
         av_log(s, AV_LOG_ERROR,
                "Some of the provided format options in '%s' are not recognized\n", seg->format_options_str);
+        ret = AVERROR(EINVAL);
+        goto fail;
     }
-    av_dict_free(&options);
+
     if (ret < 0) {
         avio_close(oc->pb);
         goto fail;
@@ -681,6 +683,7 @@ static int seg_write_header(AVFormatContext *s)
     }
 
 fail:
+    av_dict_free(&options);
     if (ret) {
         if (seg->list)
             avio_close(seg->list_pb);