diff --git a/extra/perror.c b/extra/perror.c
index e667ea723b8848309b49b16ebc3bcd4c089fe4c4..3e920ac50a4743e7789539996123658b284a3fb9 100644
--- a/extra/perror.c
+++ b/extra/perror.c
@@ -189,6 +189,7 @@ int main(int argc,char *argv[])
 {
   int error,code,found;
   const char *msg;
+  char *unknown_error = 0;
   MY_INIT(argv[0]);
 
   if (get_options(&argc,&argv))
@@ -217,7 +218,12 @@ int main(int argc,char *argv[])
       string 'Unknown Error'.  To avoid printing it we try to find the
       error string by asking for an impossible big error message.
     */
-    const char *unknown_error= strerror(10000);
+    msg = strerror(10000);
+
+    /* allocate a buffer for unknown_error since strerror always returns the same pointer 
+      on some platforms such as Windows */
+    unknown_error = malloc( strlen(msg)+1 );
+    strcpy( unknown_error, msg );
 
     for ( ; argc-- > 0 ; argv++)
     {
@@ -267,6 +273,11 @@ int main(int argc,char *argv[])
       }
     }
   }
+
+  /* if we allocated a buffer for unknown_error, free it now */
+  if (unknown_error)
+	  free(unknown_error);
+
   exit(error);
   return error;
 }