Программа в C ++ прекращает функционировать

Он просил себя нас, чтобы разрабатывать программу, которую показывал бы английский язык. Уже будь готов, но проблема состоит в том, что по истечении определенного времени, программа работает, оно прекращает функционировать и говорит, что нужно закрывать программу. Почему происходит это?

introducir la descripción de la imagen aquí

#include 
#include 

using namespace std;
int Menu();
int Practica1();
int Practica2();
int Practica3();
int Practica4();
int Practica5();
int Practica6();
int Practica7();
int Pregunta2();
int Pregunta3();
int Pregunta4();
int Pregunta5();
int Pregunta6();
int Pregunta7();
int Pregunta8();
int Pregunta9();
int Pregunta10();
int Contador();
int contador=0, c1=0, c2=0, c3=0, c4=0, c5=0, c6=0, c7=0, c8=0, c9=0, c10=0;
bool finalizar=true;
bool continuar=true;
bool opcion=true;

BITMAP *fondo;
BITMAP *practice;
BITMAP *quizz;
BITMAP *practice1;
BITMAP *quizz1;
BITMAP *p2;
BITMAP *p3;
BITMAP *p4;
BITMAP *p5;
BITMAP *p6;
BITMAP *p7;
BITMAP *q1;
BITMAP *q2;
BITMAP *q3;
BITMAP *q4;
BITMAP *q5;
BITMAP *q6;
BITMAP *q7;
BITMAP *q8;
BITMAP *q9;
BITMAP *q10;
BITMAP *incorrecto;
BITMAP *correcto;
BITMAP *sigue;
BITMAP *excelente;
int main()
{
  allegro_init();
  set_color_depth(16);
  set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800,600,0, 0);

  install_keyboard();
  install_mouse();
  show_mouse(screen);

  Menu();

  allegro_exit();
  return 0;
}

int Menu()
{
  continuar=true;

  BITMAP *exit;

  fondo = load_bitmap("fondo.bmp", NULL);

  draw_sprite(screen, fondo, 0,0);


  while(!key[KEY_ESC] && continuar)
  {

    if (mouse_x > 300 && mouse_x < 481 && mouse_y > 216 && mouse_y < 263)
    {
        practice = load_bitmap("practice.bmp",NULL);
        draw_sprite(screen, practice, 0,0);

        if (mouse_x > 297 && mouse_x < 474 && mouse_y > 213 && mouse_y < 269)
        {
          if (mouse_b&1)
          {
            Practica1();
          }
         }
    }

    else if (mouse_x  > 300  && mouse_x < 481 && mouse_y > 289  && mouse_y < 342)
    {

      quizz = load_bitmap("quizz.bmp",NULL);
      draw_sprite(screen, quizz,0,0);

      if(mouse_b&1)
      {
        while(!key[KEY_ESC])
        {
          q1 = load_bitmap("q1.bmp", NULL);
          draw_sprite(screen, q1, 0,0);

          if (mouse_b&1)
          {
            if(mouse_x > 94 && mouse_x < 121 && mouse_y >322 && mouse_y < 348 )
            {
              while(!key[KEY_ESC])
              {
                incorrecto= load_bitmap("incorrecto.bmp", NULL);
                draw_sprite(screen, incorrecto, 0,0);

                if(key[KEY_ENTER])
                {

                  if(!key[KEY_ESC])
                  {

                    return Pregunta2();

                  }

                }
              }
            }

            else if(mouse_x > 95 && mouse_x < 122 && mouse_y > 391 && mouse_y < 418)
            {
              while(!key[KEY_ESC])
              {
                incorrecto= load_bitmap("incorrecto.bmp", NULL);
                draw_sprite(screen, incorrecto, 0,0);

                if(key[KEY_ENTER])
                {

                  if(!key[KEY_ESC])

                  {
                    return Pregunta2();


                  }

                }
              }

            }

            else if (mouse_x > 97 && mouse_x < 124 && mouse_y > 471 && mouse_y < 497)
            {
              while(!key[KEY_ESC])
              {



                correcto= load_bitmap("correcto.bmp", NULL);
                draw_sprite(screen, correcto, 0,0);

                c1=1;



                if(key[KEY_ENTER])
                {

                  if(!key[KEY_ESC])
                  {
                    return Pregunta2();

                   }
                }
              }
             }
          }
        }
      }
    }
    else if (mouse_x > 300 && mouse_x < 481 && mouse_y > 372 && mouse_y < 432)
    {

      exit = load_bitmap("exit.bmp",NULL);
      draw_sprite(screen, exit,0,0);

      if(mouse_b&1)
      {
        destroy_bitmap(fondo);
        destroy_bitmap(practice1);
        destroy_bitmap(practice);
        destroy_bitmap(quizz1);
        destroy_bitmap(p2);
        destroy_bitmap(p3);
        destroy_bitmap(p4);
        destroy_bitmap(p5);
        destroy_bitmap(p6);
        destroy_bitmap(p7);
        destroy_bitmap(q1);
        destroy_bitmap(q2);
        destroy_bitmap(q3);
        destroy_bitmap(q4);
        destroy_bitmap(q5);
        destroy_bitmap(q6);
        destroy_bitmap(q7);
        destroy_bitmap(q8);
        destroy_bitmap(q9);
        destroy_bitmap(q10);
        destroy_bitmap(incorrecto);
        destroy_bitmap(correcto);
        destroy_bitmap(sigue);
        destroy_bitmap(excelente);

        continuar = false;

        return 0;
      }
    }

    else
    {
      draw_sprite(screen, fondo, 0,0);
    }

  }
  return  1;

}

int Practica1()
{
  finalizar=true;

  while(!key[KEY_ESC])
  {
    practice1=load_bitmap("p1.bmp", NULL);
    draw_sprite(screen, practice1, 0,0);

    if(mouse_x > 11 && mouse_x < 43 && mouse_y > 61 && mouse_y < 101)
    {
      if (mouse_b&1)
      {
         return Menu();
      }
    }

    else if(key[KEY_ENTER])
    {
      rest (100);
       return Practica2();
    }

    else
    {
      draw_sprite(screen,practice1,0,0);
    }

  }

  return 1;

}
int Practica2()
{
  while (!key[KEY_ESC])
  {
    p2 =load_bitmap("p2.bmp",NULL);
    draw_sprite(screen,p2,0,0);

    if (mouse_x > 11 && mouse_x < 43 && mouse_y > 61 && mouse_y < 101)
    {
      if (mouse_b&1)
      {
        rest(1000);
         return Practica1();
      }
    }

    else if(key[KEY_ENTER])
    {
      rest (100);
       return Practica3();

    }

    else
    {
      draw_sprite(screen,p2,0,0);
    }
  }

  return 1;
}

int  Practica3()
{
  while (!key[KEY_ESC])
  {
    p3 =load_bitmap("p3.bmp",NULL);
    draw_sprite(screen,p3,0,0);

    if (mouse_x > 11 && mouse_x < 43 && mouse_y > 61 && mouse_y < 101)
    {
      if (mouse_b&1)
      {
        rest(1000);
         return Practica2();
      }
    }

    else if(key[KEY_ENTER])
    {
      rest (100);
       return Practica4();

    }

    else
    {
      draw_sprite(screen,p3,0,0);
    }
  }

  return 1;
}
int Practica4()
{
  while (!key[KEY_ESC])
  {
    p4 =load_bitmap("p4.bmp",NULL);
    draw_sprite(screen,p4,0,0);

    if (mouse_x > 11 && mouse_x < 43 && mouse_y > 61 && mouse_y < 101)
    {
      if (mouse_b&1)
      {
        rest(1000);
        return  Practica3();
      }
    }

    else if(key[KEY_ENTER])
    {
      rest (100);
      return Practica5();

    }

    else
    {
      draw_sprite(screen,p4,0,0);
    }
  }

  return 1;
}
int Practica5()
{
while (!key[KEY_ESC])
  {
    p5 =load_bitmap("p5.bmp",NULL);
    draw_sprite(screen,p5,0,0);

    if (mouse_x > 11 && mouse_x < 43 && mouse_y > 61 && mouse_y < 101)
    {
      if (mouse_b&1)
      {
        rest(1000);
         return Practica4();
      }
    }

    else if(key[KEY_ENTER])
    {
      rest (100);
       return Practica6();

    }

    else
    {
      draw_sprite(screen,p5,0,0);
    }
  }

  return 1;
}
int Practica6()
{

  bool cont=true;
  while (!key[KEY_ESC])
  {
    p6 =load_bitmap("p6.bmp",NULL);
    draw_sprite(screen,p6,0,0);

    if (mouse_x > 11 && mouse_x < 43 && mouse_y > 61 && mouse_y < 101)
    {
      if (mouse_b&1)
      {
        rest(1000);
         return Practica5();
      }
    }

    else if(key[KEY_ENTER])
    {
      rest (100);
      return Practica7();

    }

    else
    {
      draw_sprite(screen,p6,0,0);
    }
  }

  return 0;
}
int Practica7()
{
  bool cont=true;

  while(!key[KEY_ESC] && cont)
  {
    p7=load_bitmap("p7.bmp", NULL);
    draw_sprite(screen, p7, 0,0);

     if (mouse_x > 11 && mouse_x < 43 && mouse_y > 61 && mouse_y < 101)
    {
      if (mouse_b&1)
      {
        rest(1000);
         return Practica6();
      }
    }
      else if(mouse_x > 702 && mouse_x < 778 && mouse_y > 300 && mouse_y < 403 )
    {
      if(mouse_b&1)
      {
        if(Menu()== 0)
        {
          cont=false;
          return 0;
        }
      }
    }

  }


  return 1;
}

int Pregunta2()
{
  while(!key[KEY_ESC])
  {
    q2 = load_bitmap("q2.bmp", NULL);
    draw_sprite(screen, q2, 0,0);

    if (mouse_b&1)
    {
      if(mouse_x > 94 && mouse_x < 121 && mouse_y >322 && mouse_y < 348 )
      {
        while(!key[KEY_ESC])
        {
          incorrecto= load_bitmap("incorrecto.bmp", NULL);
          draw_sprite(screen, incorrecto, 0,0);

          if(key[KEY_ENTER])
          {

            while(!key[KEY_ESC])
            {
              return Pregunta3();


            }

          }
        }
      }

      else if(mouse_x > 95 && mouse_x < 122 && mouse_y > 391 && mouse_y < 418)
      {
        while(!key[KEY_ESC])
        {
          correcto= load_bitmap("correcto.bmp", NULL);
          draw_sprite(screen, correcto, 0,0);

          c2=1;

          if(key[KEY_ENTER])
          {

            if(!key[KEY_ESC])
            {
              return  Pregunta3();
            }
          }
        }
      }

      else if (mouse_x > 97 && mouse_x < 124 && mouse_y > 471 && mouse_y < 497)
      {
        while(!key[KEY_ESC])
        {
          incorrecto= load_bitmap("incorrecto.bmp", NULL);
          draw_sprite(screen, incorrecto, 0,0);

          if(key[KEY_ENTER])
          {
             if(!key[KEY_ESC])
            {
              return Pregunta3();

            }

          }
        }
      }

    }
  }

  return 1;
}
int Pregunta3()
{

  while(!key[KEY_ESC])
  {
    q3 = load_bitmap("q3.bmp", NULL);
    draw_sprite(screen, q3, 0,0);

    if (mouse_b&1)
    {
      if(mouse_x > 94 && mouse_x < 121 && mouse_y >322 && mouse_y < 348 )
      {
        while(!key[KEY_ESC])
        {
          correcto= load_bitmap("correcto.bmp", NULL);
          draw_sprite(screen, correcto, 0,0);

          c3=1;


          if(key[KEY_ENTER])
          {

            if(!key[KEY_ESC])
            {
              return  Pregunta4();

            }
          }
        }
      }

      else if(mouse_x > 95 && mouse_x < 122 && mouse_y > 391 && mouse_y < 418)
      {
        while(!key[KEY_ESC])
        {
          incorrecto= load_bitmap("incorrecto.bmp", NULL);
          draw_sprite(screen, incorrecto, 0,0);

          if(key[KEY_ENTER])
          {

            if(!key[KEY_ESC])
            {
              return  Pregunta4();

            }
          }
        }
      }

      else if (mouse_x > 97 && mouse_x < 124 && mouse_y > 471 && mouse_y < 497)
      {
        while(!key[KEY_ESC])
        {
          incorrecto= load_bitmap("incorrecto.bmp", NULL);
          draw_sprite(screen, incorrecto, 0,0);

          if(key[KEY_ENTER])
          {

            if(!key[KEY_ESC])
            {
              return  Pregunta4();

            }

          }
        }
      }

    }
  }

  return 1;
}
int Pregunta4()
{

  while(!key[KEY_ESC])
  {
    q4 = load_bitmap("q4.bmp", NULL);
    draw_sprite(screen, q4, 0,0);

    if (mouse_b&1)
    {
      if(mouse_x > 94 && mouse_x < 121 && mouse_y >322 && mouse_y < 348 )
      {
        while(!key[KEY_ESC])
        {
          incorrecto= load_bitmap("incorrecto.bmp", NULL);
          draw_sprite(screen, incorrecto, 0,0);

          if(key[KEY_ENTER])
          {

            if(!key[KEY_ESC])
            {
              return Pregunta5();

            }

          }
        }
      }

      else if(mouse_x > 95 && mouse_x < 122 && mouse_y > 391 && mouse_y < 418)
      {
        while(!key[KEY_ESC])
        {
          incorrecto= load_bitmap("incorrecto.bmp", NULL);
          draw_sprite(screen, incorrecto, 0,0);

          if(key[KEY_ENTER])
          {

            if(!key[KEY_ESC])
            {
              return Pregunta5();

            }

          }
        }
      }

      else if (mouse_x > 97 && mouse_x < 124 && mouse_y > 471 && mouse_y < 497)
      {
        while(!key[KEY_ESC])
        {



          correcto= load_bitmap("correcto.bmp", NULL);
          draw_sprite(screen, correcto, 0,0);

          c4=1;




          if(key[KEY_ENTER])
          {

            if(!key[KEY_ESC])
            {
              return  Pregunta5();

            }

          }
        }
      }

    }
  }

  return 1;
}
int Pregunta5()
{

  while(!key[KEY_ESC])
  {
    q5 = load_bitmap("q5.bmp", NULL);
    draw_sprite(screen, q5, 0,0);

    if (mouse_b&1)
    {
      if(mouse_x > 94 && mouse_x < 121 && mouse_y >322 && mouse_y < 348 )
      {
        while(!key[KEY_ESC])
        {
          incorrecto= load_bitmap("incorrecto.bmp", NULL);
          draw_sprite(screen, incorrecto, 0,0);

          if(key[KEY_ENTER])
          {

            if(!key[KEY_ESC])
            {
              return  Pregunta6();


            }
          }
        }
      }

      else if(mouse_x > 95 && mouse_x < 122 && mouse_y > 391 && mouse_y < 418)
      {
        while(!key[KEY_ESC])
        {
          incorrecto= load_bitmap("incorrecto.bmp", NULL);
          draw_sprite(screen, incorrecto, 0,0);

          if(key[KEY_ENTER])
          {

            if(!key[KEY_ESC])
            {
              return Pregunta6();


            }
          }
        }
      }

      else if (mouse_x > 97 && mouse_x < 124 && mouse_y > 471 && mouse_y < 497)
      {
        while(!key[KEY_ESC])
        {


          correcto= load_bitmap("correcto.bmp", NULL);
          draw_sprite(screen, correcto, 0,0);

          c5=1;



          if(key[KEY_ENTER])
          {

            if(!key[KEY_ESC])
            {
              return Pregunta6();


            }

          }
        }
      }

    }
  }
  return 1;
}
int Pregunta6()
{


  while(!key[KEY_ESC])
  {
    q6 = load_bitmap("q6.bmp", NULL);
    draw_sprite(screen, q6, 0,0);

    if (mouse_b&1)
    {
      if(mouse_x > 94 && mouse_x < 121 && mouse_y >322 && mouse_y < 348 )
      {
        while(!key[KEY_ESC])
        {
          incorrecto= load_bitmap("incorrecto.bmp", NULL);
          draw_sprite(screen, incorrecto, 0,0);

          if(key[KEY_ENTER])
          {

            if(!key[KEY_ESC])
            {
              return Pregunta7();

            }

          }
        }
      }

      else if(mouse_x > 95 && mouse_x < 122 && mouse_y > 391 && mouse_y < 418)
      {
        while(!key[KEY_ESC])
        {
          correcto= load_bitmap("correcto.bmp", NULL);
          draw_sprite(screen, correcto, 0,0);

          c6=1;

          if(key[KEY_ENTER])
          {

            if(!key[KEY_ESC])
            {
              return Pregunta7();


            }

          }
        }
      }

      else if (mouse_x > 97 && mouse_x < 124 && mouse_y > 471 && mouse_y < 497)
      {
        while(!key[KEY_ESC])
        {



          incorrecto= load_bitmap("incorrecto.bmp", NULL);
          draw_sprite(screen, incorrecto, 0,0);

          if(key[KEY_ENTER])
          {

            if(!key[KEY_ESC])
            {
              return Pregunta7();
            }

          }
        }
      }

    }
  }

  return 1;
}
int Pregunta7()
{


  while(!key[KEY_ESC])
  {
    q7 = load_bitmap("q7.bmp", NULL);
    draw_sprite(screen, q7, 0,0);

    if (mouse_b&1)
    {
      if(mouse_x > 94 && mouse_x < 121 && mouse_y >322 && mouse_y < 348 )
      {
        while(!key[KEY_ESC])
        {
          incorrecto= load_bitmap("incorrecto.bmp", NULL);
          draw_sprite(screen, incorrecto, 0,0);

          if(key[KEY_ENTER])
          {

            if(!key[KEY_ESC])
            {
              return Pregunta8();
            }

          }
        }
      }

      else if(mouse_x > 95 && mouse_x < 122 && mouse_y > 391 && mouse_y < 418)
      {
        while(!key[KEY_ESC])
        {
          correcto= load_bitmap("correcto.bmp", NULL);
          draw_sprite(screen, correcto, 0,0);

          c7=1;

          if(key[KEY_ENTER])
          {

            if(!key[KEY_ESC])
            {
              return  Pregunta8();
            }

          }
        }
      }

      else if (mouse_x > 97 && mouse_x < 124 && mouse_y > 471 && mouse_y < 497)
      {
        while(!key[KEY_ESC])
        {
          incorrecto= load_bitmap("incorrecto.bmp", NULL);
          draw_sprite(screen, incorrecto, 0,0);

          if(key[KEY_ENTER])
          {

            if(!key[KEY_ESC])
            {
              return  Pregunta8();
            }

          }
        }
      }

    }
  }

  return 1;
}
int Pregunta8()
{

  while(!key[KEY_ESC])
  {
    q8 = load_bitmap("q8.bmp", NULL);
    draw_sprite(screen, q8, 0,0);

    if (mouse_b&1)
    {
      if(mouse_x > 94 && mouse_x < 121 && mouse_y >322 && mouse_y < 348 )
      {
        while(!key[KEY_ESC])
        {
          incorrecto= load_bitmap("incorrecto.bmp", NULL);
          draw_sprite(screen, incorrecto, 0,0);

          if(key[KEY_ENTER])
          {

            if(!key[KEY_ESC])
            {
              return Pregunta9();
            }

          }
        }
      }

      else if(mouse_x > 95 && mouse_x < 122 && mouse_y > 391 && mouse_y < 418)
      {
        while(!key[KEY_ESC])
        {
          correcto= load_bitmap("correcto.bmp", NULL);
          draw_sprite(screen, correcto, 0,0);

          c8=1;

          if(key[KEY_ENTER])
          {

            if(!key[KEY_ESC])
            {
              return Pregunta9();
            }

          }
        }
      }

      else if (mouse_x > 97 && mouse_x < 124 && mouse_y > 471 && mouse_y < 497)
      {
        while(!key[KEY_ESC])
        {



          incorrecto= load_bitmap("incorrecto.bmp", NULL);
          draw_sprite(screen, incorrecto, 0,0);




          if(key[KEY_ENTER])
          {

            if(!key[KEY_ESC])
            {
              return Pregunta9();


            }

          }
        }
      }

    }
  }

  return 1;
}
int Pregunta9()
{

  while(!key[KEY_ESC])
  {
    q9 = load_bitmap("q9.bmp", NULL);
    draw_sprite(screen, q9, 0,0);

    if (mouse_b&1)
    {
      if(mouse_x > 94 && mouse_x < 121 && mouse_y >322 && mouse_y < 348 )
      {
        while(!key[KEY_ESC])
        {
          correcto= load_bitmap("correcto.bmp", NULL);
          draw_sprite(screen, correcto, 0,0);

          c9=1;

          if(key[KEY_ENTER])
          {

            if(!key[KEY_ESC])
            {
              return  Pregunta10();

            }

          }
        }
      }

      else if(mouse_x > 95 && mouse_x < 122 && mouse_y > 391 && mouse_y < 418)
      {
        while(!key[KEY_ESC])
        {
          incorrecto= load_bitmap("incorrecto.bmp", NULL);
          draw_sprite(screen, incorrecto, 0,0);

          if(key[KEY_ENTER])
          {

            if(!key[KEY_ESC])
            {
              return  Pregunta10();


            }

          }
        }
      }

      else if (mouse_x > 97 && mouse_x < 124 && mouse_y > 471 && mouse_y < 497)
      {
        while(!key[KEY_ESC])
        {


          incorrecto= load_bitmap("incorrecto.bmp", NULL);
          draw_sprite(screen, incorrecto, 0,0);



          if(key[KEY_ENTER])
          {

            if(!key[KEY_ESC])
            {
              return Pregunta10();


            }

          }
        }
      }

    }
  }

  return 1;

}
int Pregunta10()
{

  while(!key[KEY_ESC])
  {
    q10 = load_bitmap("q10.bmp", NULL);
    draw_sprite(screen, q10, 0,0);

    if (mouse_b&1)
    {
      if(mouse_x > 94 && mouse_x < 121 && mouse_y >322 && mouse_y < 348 )
      {
        while(!key[KEY_ESC])
        {
          incorrecto= load_bitmap("incorrecto.bmp", NULL);
          draw_sprite(screen, incorrecto, 0,0);

          if(key[KEY_ENTER])
          {

            if(!key[KEY_ESC])
            {
              return Contador();
            }

          }
        }
      }

      else if(mouse_x > 95 && mouse_x < 122 && mouse_y > 391 && mouse_y < 418)
      {
        while(!key[KEY_ESC])

        {
          correcto= load_bitmap("correcto.bmp", NULL);
          draw_sprite(screen, correcto, 0,0);

          c10=1;

          if(key[KEY_ENTER])
          {

            if(!key[KEY_ESC])
            {
              return Contador();


            }

          }
        }
      }

      else if (mouse_x > 97 && mouse_x < 124 && mouse_y > 471 && mouse_y < 497)
      {
        while(!key[KEY_ESC])
        {

          incorrecto= load_bitmap("incorrecto.bmp", NULL);
          draw_sprite(screen, incorrecto, 0,0);

          if(key[KEY_ENTER])
          {

            if(!key[KEY_ESC])
            {
              return Contador();


            }

          }
        }
      }

    }
  }

  return 1;
}
int Contador()
{
  bool opcion=true;

  contador=c1+c2+c3+c4+c5+c6+c7+c8+c9+c10;

  while(!key[KEY_ESC] && opcion)
  {
    if( contador < 7)
    {

      sigue=load_bitmap("sigue.bmp", NULL);
      draw_sprite(screen, sigue, 0,0);
      if(mouse_x > 717 && mouse_x < 776 && mouse_y > 481 && mouse_y < 570 )
      {

        if(mouse_b&1)
        {

          if(Menu()==0)
          {
            opcion=false;
            return 0;
          }

        }
      }

    }
    else
    {

      excelente=load_bitmap("excelente.bmp", NULL);
      draw_sprite(screen, excelente, 0,0);


      if(mouse_x > 690 && mouse_x < 764 && mouse_y > 469 && mouse_y < 570 )
      {

        if(mouse_b&1)
        {

          if(Menu()==0)
          {
            opcion=false;
            return 0;
          }
        }
      }
    }
  }

  return 1;
}
END_OF_MAIN();

0
задан 08.01.2017, 10:04
1 ответ

Не смотря со слишком много детали я вижу, что указатели не инициализировались:

BITMAP *p4;

Потом в позднейшее ты не будешь знать, должен освобождать ли ты присоединенную или нет память... Из-за которого это:

destroy_bitmap(p4);

Он восприимчивый вызывания ошибки, если bitmap не был создан в конце концов, так как он попробует освобождать память, которую ты не разместил.

3
ответ дан 24.11.2019, 11:57