diff --git a/dap_dns_server.c b/dap_dns_server.c
index 99bb525ce5f3167ab1d1d9ed7519e81d4466372a..579971a4978e7c47d18941b3eb85ae18e0202e8e 100755
--- a/dap_dns_server.c
+++ b/dap_dns_server.c
@@ -148,8 +148,8 @@ dap_dns_zone_callback_t dap_dns_zone_find(char *hostname) {
         if (!strcmp(hostname, &s_root_alias[0])) {
             return NULL;
         }
-        char *zone_up = strchr(hostname, '.') + 1;
-        if (zone_up == 1) {
+        char *zone_up = strchr(hostname, '.');
+        if (zone_up++ == NULL) {
             zone_up = &s_root_alias[0];
         }
         return dap_dns_zone_find(zone_up);
@@ -326,5 +326,6 @@ void dap_dns_server_stop() {
         DAP_DELETE(current_zone);
     }
     // TODO add code to stop udp_thread
-    dap_udp_server_delete(s_dns_server->instance);
+    dap_udp_server_delete(s_dns_server->instance);
+    DAP_DELETE(s_dns_server);
 }