Testest du das am PC? Dann kompilier es mit Debug informationen (-g bei gcc) und führe es mit einem Debugger aus. Dann siehst du genau das Problem.
Code:
char ** list;
list = new char*[menulen];
for(int i = 0; i < captlen; i++)
{
   list[i] = new char[captlen];
Dann solltest du auch sehen, dass du in der For Schleife die falsche Variable verwendest

for(int i = 0; i < captlen; i++)

zu:
for(int i = 0; i < menulen; i++)