diff --git a/ping.c b/ping.c
index c0366cd..04f5596 100644
--- a/ping.c
+++ b/ping.c
@@ -282,10 +282,15 @@ main(int argc, char **argv)
                        hp = gethostbyname(idn);
                        if (!hp) {
                                fprintf(stderr, "ping: unknown host %s\n", target);
+#ifdef USE_IDN
+                               free(idn);
+                               idn = NULL;
+#endif
                                exit(2);
                        }
 #ifdef USE_IDN
                        free(idn);
+                       idn = NULL;
 #endif
                        memcpy(&whereto.sin_addr, hp->h_addr, 4);
 #ifdef USE_IDN
@@ -301,6 +306,10 @@ main(int argc, char **argv)
                        hnamebuf[sizeof(hnamebuf) - 1] = 0;
 #endif
                        hostname = hnamebuf;
+#ifdef USE_IDN
+                       free(hnamebuf);
+                       hnamebuf = NULL;
+#endif
                }
                if (argc > 1)
                        route[nroute++] = whereto.sin_addr.s_addr;
