arduino strucks on Serial.println(); SRAM or other fault

Hello,

I am making GSM control unit. Arduino strucks on any command in function(check photo):
void epwrite(){
if(kelintas==1){
for(i=0;i<9;i++){
EEPROM.write(i, atpaz.substring(i, i+1).toInt());
}}
if(kelintas==2){
for(i=10;i<19;i++){
EEPROM.write(i, atpaz1.substring(i-10, i-9).toInt());
}}
if(kelintas==3){
for(i=20;i<29;i++){
EEPROM.write(i, atpaz2.substring(i-20, i-19).toInt());
}}
delay(700);
Serial.println("anything");
}

I tried to add SRAM checking function Arduino Playground - AvailableMemory and it shows about 900bytes of memory left. When I put more commands it strucks earlier. That could be fault about this error? When I call this command from other place it works good. Can I change stack and heap on arduino, as on IAR? Whole code is about 490lines, pretty long.. Maybe some other ideas?

When code was not so long, it worked good. Added more functions - it should write something one time, but it has been writting twice; much more functions - it strucks.

Post code, not screenshots.

AWOL:
Post code, not screenshots.

Use code tags.

When code was not so long, it worked good. Added more functions - it should write something one time, but it has been writting twice; much more functions - it strucks.

That's generally what happens when you run out of memory.

It is not full code, only everything around faulty function:

void loop() {
  modemas();     //I tried to put nrkeitimas() here, it worked fine
  sildo();
  wdt_reset();
}
//////////////////////---skaitom iš GSM modemo***////////////////////////
void modemas(){ 
  if (gsmSerial.available () > 0)             //jei modemas siun?ia duomenis, juos nuskaitom
  {
    while (gsmSerial.available () > 0) {
      char inByte = gsmSerial.read ();

      switch (inByte)
      {

      case '\n':   // jei teksto pabaiga
        eil+=1;
        input_line [input_pos] = 0;  //nulinam eilut?
        data=input_line;
        process_data ();//(input_line);
        delay(3);
        input_pos = 0;               //nulinam pozicij?
        break;

      case '\r':                //atmetam carriage return
        break;

      default:
        if (input_pos < (MAX_INPUT - 1))
          input_line [input_pos++] = inByte;       //gauti duomenys surašomi ? eilut?
        break;

      }
    }
  }
}
////////////////
void process_data (){
if(strstr(data, "REC UNREAD")){
    numeris+='8';
    for(i=25;i<33;i++){
      numeris+= data[i];
    }
  }  
  if(strstr(data, "+CMTI:")){    // +CMTI reiskia, kad gavom SMS?
    char* copy = data + 12;      // ži?rim kelintas SMSas
    SMS_location_number = (byte) atoi(copy);  // pasiver?iam reikšm?(eilut?) ? skai?i?
    gsmSerial.print("AT+CMGR=");
    gsmSerial.println(SMS_location_number);  // Skaitom SMS? 
    sms=1;
    numeris=NULL;
    eil=0;
  }
  else if(strstr(data, kodas) && strstr(data, "naujas nr ")){
    char* cop = data + 17;
    kelintas = (byte) atoi(cop);
    for (i=19; i<28;i++)
      naujasnr += data[i];
    nrkeitimas();                             //          THIS IS FAULTY FUNCTION
  }
///////////////
//////////////////Here are many "else if's" for other commands
///////////////
}
void nrkeitimas(){                              //atpazistamo numerio keitimo funkcija
  Serial.println("freeMemory()=");
  Serial.println(freeMemory());
  Serial.println("Y"); 
  if(kelintas==1){
  atpaz=naujasnr;
  }
  else if(kelintas==2){
  atpaz1=naujasnr;
  }
  else if(kelintas==3){
  atpaz2=naujasnr;
  }
  else neteisinga();
  epwrite();                          /////////  It strucks even here(before doing epwrite()) if add more code
  Serial.println(naujasnr);
  gsmSerial.print(F("AT+CMGS="));
  gsmSerial.print(naujasnr);
  gsmSerial.println(F("\r"));
  delay(700);
  gsmSerial.print(F("Vartotojo ")); 
  gsmSerial.print(kelintas);
  gsmSerial.print(F(" numeris sekmingai pakeistas"));
  gsmSerial.print((char)26);
  gsmSerial.print(F("\r"));
  wait(1);
  
  naujasnr=NULL;
}

void epwrite(){
if(kelintas==1){
  for(i=0;i<9;i++){
    EEPROM.write(i, atpaz.substring(i, i+1).toInt());
    Serial.println(i);
  }}
if(kelintas==2){
for(i=10;i<19;i++){
  delay(3);
  EEPROM.write(i, atpaz1.substring(i-10, i-9).toInt());
}}
if(kelintas==3){
for(i=20;i<29;i++){
  EEPROM.write(i, atpaz2.substring(i-20, i-19).toInt());
}}                                                                                     ///////// HERE it strucks
}

RobvdVeer:

AWOL:
Post code, not screenshots.

Use code tags.

Even interrupt doesn't work, when this happens, but watchdog keeps counting.