diff --git a/src/main.c b/src/main.c
index 848ab47342d2c8197f8eeeab6f8863750f948900..ed0ad03e2a1a23c35c1d74c4b7721841bd1021ba 100644
--- a/src/main.c
+++ b/src/main.c
@@ -5,7 +5,7 @@
 #include "commands.h"
 #include "utils.h"
 
-static void release_argv(int argc, char** argv);
+static void release_argv(int argc, char*** argv);
 
 int main()
 {
@@ -34,19 +34,20 @@ int main()
       fprintf(stderr, "%s: command not found\n", argv[0]);
     }
 release_and_continue:
-    release_argv(argc, argv);
+    release_argv(argc, &argv);
     continue;
 release_and_exit:
-    release_argv(argc, argv);
+    release_argv(argc, &argv);
     break;
   }
 
   return 0;
 }
 
-static void release_argv(int argc, char** argv) {
+static void release_argv(int argc, char*** argv) {
   for (int i = 0; i < argc; ++i) {
-    free(argv[i]);
+    free((*argv)[i]);
   }
-  free(argv);
+  free(*argv);
+  *argv = NULL;
 }
diff --git a/tests/src/command_parsing_test.cc b/tests/src/command_parsing_test.cc
index e7f06016900d4ee2940f1c2ae6b07955d5b9f411..6f943a1174cb34cb5c9d178ce0cd808123e2e857 100644
--- a/tests/src/command_parsing_test.cc
+++ b/tests/src/command_parsing_test.cc
@@ -98,5 +98,5 @@ static void free_string_array(char*** argv, int num_str) {
 
   free(*argv);
 
-  argv = NULL;
+  *argv = NULL;
 }