Problem with array of objects

You should be making the array in PROGMEM (flash) instead of RAM and accessing through the special PROGMEM instructions.

I do this with my user-I/O menus and error messages even if I don't need just to stay in practice.

Examples ---

This just to show what HELPLINES and B (for byte) are:

#define  HELPLINES  7
byte B;

Declaring a multi-line Program Usage message to be stored in flash and then a pointer into flash:

const char PROGMEM usageMsg[][80] = { // all this text stored in flash
  "          Piezo touch sensor tuner.",
  "Adjust vertical; enter W to subtract or X to add, and a number 0-255",
  "Adjust timescaler; enter A to subtract or D to add, and 0-16535",
  "to add 250 to vertical enter W250 in Serial Monitor and press enter",
  "seperate multiple commands with spaces; ex: W25 D240",
  "    ** this message stored in flash ram **",
  "    ** and printed with a 1 byte buffer ** :-P"
};

PGM_P Msg; // pointer into flash memory

First function prints a single line of text from flash. Second function prints multiple lines.

void  printMsg( PGM_P FM )
{
  do 
  {
    B = pgm_read_byte( FM++ );    // pgm_read_byte( PGM_P ) is the only special access I use
    if ( B )  Serial.print( B );          // but there are more to cover things like ints, etc.
  }                                               
  while ( B );
}

void printHelp(void)
{
  for ( byte i = 0; i < HELPLINES; i++ )
  {
    printMsg( usageMsg[ i ]);
    Serial.println();
  }
  Serial.println();
}

PROGMEM doc page over at AVR_Libc -- the home of the C/C++ Arduino uses:
http://www.nongnu.org/avr-libc/user-manual/group__avr__pgmspace.html