Ich vermute das das die Lösung bringt:

if (index >= (int)(sizeof(menue) / sizeof(TMenuStruct)))

index ist vom Typ int und sizeof meines Wissens ein unsigned int oder char.
D.h. der Vergleich könnte als unsigned ausgeführt werden.

Bei einem 16-Bit int wird -1 Dezimal intern als 1111111111111111 Binär dargestellt.
Wird dieser Wert in einen signed umgewandelt kommt ein Wert von 65535 raus.

Babbage