Error and restart after some time

Hello,

im a bginner to play with the NodeMUC ESP8266.

I write a code and i have a problem.
i use this code and load it into the NodeMUC ESP8266. After some time the ESP restarts and I don't know why. Is there an error in the code that I don't see during compiler?

Program funktion:
if no login to WLAN open an AP.
SSID and PW can be entered in the web interface.

I know there are ready made examples with this function but I wanted to have a simpler and smaller program.

Can you help me get a stable program?

thanks

#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiClient.h> 
#include <EEPROM.h>
#include <WiFiUDP.h>
#include <ESP8266WebServer.h>

ESP8266WebServer server(80);
#include "APwebserver.h"


void ioPorts()
{    
//Set Inputs Outputs
pinMode (D5, INPUT_PULLUP);
pinMode (D6, OUTPUT);           //LED Call aktiv
pinMode (D7, OUTPUT);           //LED on the way
pinMode (LED_BUILTIN, OUTPUT);
pinMode (D3, INPUT);            //Reset Input
}

void setup() {
  // put your setup code here, to run once:
    Serial.begin(115200);
    delay(500);
    EEPROM.begin(512);            //EEPROM initalisieren
    WiFi.mode(WIFI_STA);          //WIFI Modus
    Serial.println(WiFi.hostname());


////////////////////////////UDP Start//////////////////////////////////////////////
/*
    Udp.begin(localPort);
    if (MDNS.begin("esp8266")) {
       Serial.println("MDNS responder started");
    }
*/ 
////////////////////////////UDP Start//////////////////////////////////////////////

////////////////////////////Reading EEProm SSID-Password//////////////////////////////////////////////
    for (int i = 0; i < 32; ++i)                             //Reading SSID
    {
      ssidEEPROM +=  char(EEPROM.read(0+i)); 
    }
    for (int i = 32; i < 96; ++i)                            //Reading Password
    {
      passwordEEPROM += char(EEPROM.read(0+i)); 
    }
  if ( ssidEEPROM.length() > 1 ) 
    {  
      ssidEEPROM = ssidEEPROM.c_str();
      passwordEEPROM = passwordEEPROM.c_str();
      
      Serial.println(ssidEEPROM);                             //Print SSID
      Serial.println(passwordEEPROM);                         //Print Password
      delay(5000);      
      WiFi.begin(ssidEEPROM, passwordEEPROM);   
      delay(10000);                                    //Wait for IP to be assigned to Module by Router
      IPAddress ip = WiFi.localIP();                  //Get ESP8266 IP Adress
      Serial.print("IP=");
      Serial.print(ip);                               //Print Ip on serial monitor or any serial debugger

    }  
////////////////////////////Reading EEProm SSID-Password//////////////////////////////////////////////
}

  
void loop() {

  ioPorts();                                   //IO Ports


    if (WiFi.status() != WL_CONNECTED) 
    {
      delay(10000);
      Serial.println("not connected. Start AP");
      IPAddress ip = WiFi.softAPIP(); 
      WiFi.mode(WIFI_AP);   
    }
   APModeIsEnable(); 
   server.handleClient();
  
    
////////////////////////Reset Device//////////////////////////

    int counter = 0;
    while(digitalRead(0) == LOW)
    {
      counter++;
      delay(1000);
      if (digitalRead(0) == LOW && counter > 5)
       {
        counter = 0;
        for (int i = 0; i < 100; ++i) { EEPROM.write(i, 0); }
        EEPROM.commit();
        Serial.println("Reset");
        WiFi.disconnect(true);
        ESP.eraseConfig();
        ESP.restart();
       }
    }

////////////////////////Reset Device///////////////////////////

}
///////////////////////////////////////////WEBSERVER AP MODE////////////////////////////////////////


String ssidEEPROM = "";                   //EEPROM Network SSID
String passwordEEPROM = "";               //EEPROM Network Password
String ssidWEB = "";                      //WEB SSID
String passwordWEB = "";                  //WEB Password

void APWebserverStart()
{
  String st="",s="";                      //String array to store the SSID's of available networks
    /*
  int Tnetwork=0,i=0,len=0;
  Tnetwork = WiFi.scanNetworks();       //Scan for total networks available
  st = "<ul>";
  for (int i = 0; i < Tnetwork; ++i)
    {
      // Print SSID and RSSI for each network found
      st += "<li>";
      st +=i + 1;
      st += ": ";
      st += WiFi.SSID(i);
      st += " (";
      st += WiFi.RSSI(i);
      st += ")";
      st += (WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*";
      st += "</li>";
    }

    */
      st += "</ul>";
   IPAddress ip = WiFi.softAPIP();                  //Get ESP8266 IP Adress
        //String ipStr = String(ip[0]) + '.' + String(ip[1]) + '.' + String(ip[2]) + '.' + String(ip[3]);
        s = "\n\r\n<!DOCTYPE HTML>\r\n<html><h1>Angelus</h1> ";
        //s += ipStr;
        s += "<p>";
        s += st;
        s += "<form method='get' action='a'><label>SSID: </label><input name='ssid' length=32><label>Paswoord: </label><input name='pass' length=64><input type='submit'></form>";
        s += "</html>\r\n\r\n";
      
    server.send( 200 , "text/html", s);
}

////////////////////////////////////WEBSERVER AP MODE///Get SSID & Password////////////////////////////////////////
void APWEBInfo(){

  if (server.hasArg("ssid") && server.hasArg("pass"))
  {  
   ssidWEB=server.arg("ssid");//Get SSID
   passwordWEB=server.arg("pass");//Get Password
  }

  if(ssidWEB.length()>1 && passwordWEB.length()>1)              //Save SSID & PW to EEPROM
  {

     for (int i = 0; i < 96; ++i) { EEPROM.write(i, 0); }
     delay(10);

     
      for (int i = 0; i < ssidWEB.length(); ++i)
          {
            EEPROM.write(0+i, ssidWEB[i]);
          }   
      for (int i = 0; i < passwordWEB.length(); ++i)
          {
            EEPROM.write(32+i, passwordWEB[i]);
          }    
      EEPROM.commit();
      delay(1000);      
        String s = "\r\n\r\n<!DOCTYPE HTML>\r\n<html><h1>Angelus</h1> ";
        s += "<p>Password Saved... Reset to boot into new wifi</html>\r\n\r\n";
        server.send(200,"text/html",s);
      delay(1000);                                          //Restart ESP8266 after 1 second
      WiFi.disconnect();
      WiFi.mode(WIFI_STA);
      ESP.restart(); 
     
  }     
}
/////////////////////////////////WEBSERVER AP MODE/// Get SSID & Password//////////////////////////


void APModeIsEnable(){

  delay(100);                    //Stable AP
  server.on("/",APWebserverStart);     //if
  //If submit button is pressed get the new SSID and Password and store it in EEPROM 
  server.on("/a",APWEBInfo);
  server.begin(); 
  delay(300); 
  }

----Error----

12:03:17.550 -> Abort called
12:03:17.550 -> 
12:03:17.550 -> >>>stack>>>
12:03:17.550 -> 
12:03:17.550 -> ctx: cont
12:03:17.550 -> sp: 3ffffcf0 end: 3fffffc0 offset: 01b0
12:03:17.550 -> 3ffffea0:  00000000 0000014e 3ffffef0 402034f9  
12:03:17.550 -> 3ffffeb0:  402082e8 00000000 00000000 402108f4  
12:03:17.596 -> 3ffffec0:  40201038 0000000d 402082fc 402082e8  
12:03:17.596 -> 3ffffed0:  4023ebbe 0000000d 3ffef694 3ffee678  
12:03:17.596 -> 3ffffee0:  402082e8 3fffff60 3ffee428 40203570  
12:03:17.596 -> 3ffffef0:  00000009 00000001 00000000 3ffee678  
12:03:17.596 -> 3fffff00:  40201038 00000001 402082fc 402082e8  
12:03:17.596 -> 3fffff10:  00000000 3ffee6d4 3fffff60 402056dc  
12:03:17.596 -> 3fffff20:  3fffdad0 3ffee428 3fffff60 402035a9  
12:03:17.596 -> 3fffff30:  40201038 00000064 402082fc 402082e8  
12:03:17.596 -> 3fffff40:  40233342 402082fc 3ffee428 402013d4  
12:03:17.596 -> 3fffff50:  40201038 00000000 402082fc 402082e8  
12:03:17.596 -> 3fffff60:  0000002f 00000000 00fee41c 40201372  
12:03:17.645 -> 3fffff70:  3fffdad0 3ffee510 3ffee648 40201466  
12:03:17.645 -> 3fffff80:  0000005f 00000060 feefeffe feefeffe  
12:03:17.645 -> 3fffff90:  00000000 00000000 00000001 3ffee678  
12:03:17.645 -> 3fffffa0:  3fffdad0 00000000 3ffee648 402065c8  
12:03:17.645 -> 3fffffb0:  feefeffe feefeffe 3ffe8508 40100531  
12:03:17.645 -> <<<stack<<<
12:03:17.645 -> 
12:03:17.645 -> last failed alloc call: 4021010E(56)
12:03:17.645 -> 
12:03:17.645 ->  ets Jan  8 2013,rst cause:2, boot mode:(3,6)
12:03:17.645 -> 
12:03:17.645 -> load 0x4010f000, len 1384, room 16 
12:03:17.645 -> tail 8
12:03:17.692 -> chksum 0x2d
12:03:17.692 -> csum 0x2d
12:03:17.692 -> v8b899c12
12:03:17.692 -> ~ld
12:03:18.246 -> ESP_050AF5
12:03:18.246 -> TP-Link_4800
12:03:18.246 -> 26304007
12:03:33.243 -> IP=192.168.0.100

have you tried the Exception Stack Trace Decoder for ESP8266?