Program glitching strangely

I’m writing a program for my arduino, and got a very strange glitch. Here’s my code:

#include <LiquidCrystal.h>
LiquidCrystal lcd(6, 7, 8, 9, 10, 11);
const int dotb = 2;
const int dashb = 3;
const int dot = true;
const int dash = false;
const int green = 3;
const int signal = 13;
int blinklights[] = {4, 5, 12, 13};
unsigned long start; //timekeeper
int i; //iterator
int errors; //records user errors
char* dadMesses[] = {"This phrase is   overrated,     but, Merry      Christmas and   Happy Holidays!", "It's kinda coolthat you get upat six every      morning to drive me to school.   But only kind of ;) ", "My favorite food in the world isyour chicken    drumsticks      (Thanks for     making them).   Wait-that meansI get them      tonight, right?", "Dialogue time!  Albert: Hello!  It's a nice day. Dad: BE         QUIET!!!! ", "Random fact     time! The firstperson selectedas the Time     Magazine Man ofthe Year was    Charles         Lindbergh (I doubt   it) "};
//char* momMessages[10] = {"The password DLSis a secure,    random sequence of letters I    made up that    happens to      correspond with the phrase,     Don't Like      Shopping ", "The cool thing  about shopping  with Mom is thatafterwards, I   know that I     won't have to   shop for like   four months!    Just joking! ", "In case you     haven't         realized, that  was a Santa     emotion. He saysMerry Christmas  and Happy      Holidays ", "Supposedly      saying thank you lowers your     blood pressure  and stuff. So,  thank you for   taking care of  me! No,         seriously. "};
boolean momcode[15] = {dash, dot, dot, dot, dash, dot, dot, dot, dot}; //(SOS) code (_._) True represents dash, flase represents dot
boolean dadcode[15] = {dash, dot, dot, dot, dot, dot, dash, dash, dot, dot, dot, dot, dot, dot};
int randnum;
boolean breakout;
boolean person; //true is dad, false is mom
int numlight = 0;
int blinklight = 0;
int b; //2nd iterator
int prevpress;
void setup(){
  pinMode(dotb, INPUT);
  pinMode(dashb, INPUT);
  pinMode(green, OUTPUT);
  pinMode(signal, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.clear();
  lcd.print("Enter the");
  lcd.setCursor(0, 1);
  lcd.print("password");
  delay(15);
  randomSeed(analogRead(0));
}
void loop(){
  while(true){
    while(digitalRead(dotb) == LOW and digitalRead(dashb) == LOW); //wait until button goes high
    boolean usercode[10] = {}; //code that user enters
    for(i = 0; i < 15; i++){
      if(digitalRead(dotb) == LOW){prevpress = 3;}
      else{prevpress = 2;}
      digitalWrite(signal, HIGH);
      Serial.println(i);
      while(digitalRead(prevpress) == HIGH); //wait until button goes low
      digitalWrite(signal, LOW);
      usercode[i] = (prevpress == 2);
      start = millis();
      delay(15);
      while(digitalRead(dotb) == LOW and digitalRead(dashb) == LOW){ //wait until button goes high
        if(millis() - start > 2000){
           goto bailout;
        }
      }
      delay(15);
    }
    bailout:
    Serial.println("at bailout");
    errors = 0;
    
    for(i = 0; i < 10; i++){
      Serial.println(usercode[i]);
      if(usercode[i] != momcode[i]){ //check for errors
        if(usercode[i] != dadcode[i]){
          errors++;
        }
        else{
          person = true;
      }
      }
      else{
        person = false;
      }
    }
    if(errors < 1){
      break;
    }
    flash(signal, 50);
  }
  attachInterrupt(0, push, RISING);
  while(true){
    breakout = true;
    randnum = random(5);
    scrollprint(dadMesses[randnum], String(dadMesses[randnum]).length());
  }
}

void flash(int pin, int length){
  digitalWrite(pin, HIGH);
  delay(length);
  digitalWrite(pin, LOW);
}

void scrollprint(const char* mystring, int strsize){ //scroll printing
  while(true){
      lcd.setCursor(0, 0);
      lcd.clear();
      delay(15);
      for(i = 0; i < strsize; i++){
      lcd.write(mystring[i]);
      if((i + 1) % 32 == 0){
        for(b = 0; b < 3; b++){
          delay(150);
          nextled();
        }
        lcd.clear();
        delay(15);
        lcd.setCursor(0, 0);
      }
      else if((i + 1) % 16 == 0){
        lcd.setCursor(0, 1);
      }
      delay(135);
      nextled();
      if(not breakout){
        goto nextmsg;
      }
    }
    for(b = 0; b < 6; b++){
      delay(150);
      nextled();
    }
  }
  nextmsg:
  lcd.clear();
  delay(15);
}

void push(){
  breakout = false;
}

void nextled(){
  digitalWrite(blinklights[blinklight], LOW);
  blinklight += 1;
  if(blinklight > 3){
    blinklight = 0;
  }
  digitalWrite(blinklights[blinklight], HIGH);
}

The code compiles, and works fine up until line 86. Then, everything works as normal but the LCD just goes blank. If a comment out either the dadmessage or mommessage variables, the glitch disappears. I’m only using 8,428 bytes. Any ideas as to what is causing this?

You are using While (1) within infinite loop. So try with test conditions WHere you made entry & exit condition & try it out.