Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/05/2009, 13:24
huevofritopamojarpan
 
Fecha de Ingreso: diciembre-2008
Mensajes: 9
Antigüedad: 15 años, 5 meses
Puntos: 0
Exclamación Segmentation fault

Hola!

Me da este error en tiempo de ejecución.

Código C:
Ver original
  1. typedef struct
  2. {
  3.     unsigned short int ano, mes, dia, hora, min, seg;
  4. }tipo_fecha;
  5.  
  6. //Tipo de dato usuario.
  7. typedef struct
  8. {
  9.     char login[21], password[21], nombre[21], apellido[42], ext[6];
  10.     tipo_fecha ult_reserva;
  11. }tipo_usuario;
  12.  
  13. //Tipo de dato reserva
  14. typedef struct
  15. {
  16.     unsigned short int ocupado;
  17.     tipo_usuario usuario;
  18. }tipo_reserva;
  19.  
  20. void consultar_reservas_mes(tipo_reserva *matriz_reservas)
  21. {
  22.     printf("1");    
  23.     int mes, dia, hora;
  24.     int tamanho;
  25.     tamanho=sizeof(tipo_reserva);
  26.     /*do
  27.     {
  28.                               printf("\nNumero del mes a consultar: ");scanf("%d",&mes);
  29.         /*if ((mes>12) || (mes<1)) printf("\nNumero de mes no valido.\n");
  30.         else break;
  31.     }while(1);*/
  32.     mes=8;
  33.     printf("prueba 2 %d",&tamanho);
  34.    
  35.     //Recorro la matriz_reservas buscandos los unos en la matriz_reservas.ocupado e imprimo la reserva;
  36.     for (dia=0;dia<31;dia++) for (hora=0;hora<10;hora++)
  37.     {    
  38.         if ( (matriz_reservas+(tamanho*10*30*mes)+(10*tamanho*dia)+(tamanho*hora))->ocupado!=0)
  39.         {
  40.             printf("\nEl dia %d del mes %d a las %d la sala ha sido reservada por %s %s\n"
  41.                    ,dia,mes,hora,(matriz_reservas+(tamanho*12*30*mes)+(12*tamanho*dia)+(tamanho*hora))->usuario.nombre,
  42.                     (matriz_reservas+(tamanho*10*30*mes)+(10*tamanho*dia)+(tamanho*hora))->usuario.apellido);
  43.         }
  44.     }
  45. }
  46.  
  47. int main()  
  48. {
  49.     //Declaración de las variables
  50.     char basura;
  51.     unsigned short int mes,dia,hora;
  52.     char opcion,confirmacion;
  53.     char nombre[STRING_CORTO], password[STRING_CORTO];
  54.     tipo_usuario usuario;
  55.     tipo_fecha fecha;
  56.     //los índices de los arrays: mes,dia,hora
  57.     tipo_reserva matriz_reservas[12][31][12];
  58.    
  59.     //Pongo todas las reservas a 0.
  60.     for (mes=0;mes<12;mes++) for (dia=0;dia<31;dia++) for (hora=0;hora<12;hora++) matriz_reservas[mes][dia][hora].ocupado=0;
  61.    
  62.     do
  63.     {
  64.         printf("\nEscoja una opcion:\n");
  65.         printf("\n1 - Loguearse\n2 - Salir\n");
  66.         scanf("%d",&opcion);
  67.         scanf("%c",&basura);
  68.         if (opcion==1)
  69.         {
  70.             if (/*login(usuario)*/1)
  71.             {
  72.                 printf("\nLogueado correctamente\n");
  73.                 do
  74.                 {
  75.                     opcion=menu();
  76.                     scanf("%c",&basura);
  77.                     switch(opcion)
  78.                     {
  79.                         case 1: introducir_datos(&usuario);                    
  80.                             break;
  81.                         case 2: consultar_reservas_mes(&matriz_reservas[0][0][0]);//Aquí es donde invoco la funcion
  82.                             break;
  83.                         case 3:
  84.                             //consultar_reservas_usuario(matriz_reservas, usuario);
  85.                             break;
  86.                         case 4:
  87.                             if (usuario.nombre[0]==0) printf("\a\nIntroduzca primero sus datos\n\n");
  88.                             else
  89.                             {
  90.                                 do
  91.                                 {
  92.                                     printf("\nDatos de la reserva:\n   Mes: ");scanf("%d",&fecha.mes);
  93.                                     printf("   Dia: ");scanf("%d",&fecha.dia);
  94.                                     printf("   Hora a reservar (de 8 a 20): ");scanf("%d",&fecha.hora);
  95.                                     if ((validar_fecha(fecha)) || ((fecha.hora<21) && (fecha.hora>7))) break;
  96.                                     else printf("\a\nFecha u hora incorrecta\n");
  97.                                 }while(1);
  98.                                 if (matriz_reservas[fecha.mes][fecha.dia][fecha.hora].ocupado==0)
  99.                                 {
  100.                                     printf("Realizar la reseva? (S/N): ");scanf("%s",&confirmacion);
  101.                                     if ((strcmp(&confirmacion,"S")==0) || (strcmp(&confirmacion,"s")==0))
  102.                                     {
  103.                                         matriz_reservas[fecha.mes][fecha.dia][fecha.hora].ocupado=1;
  104.                                         strcpy(matriz_reservas[fecha.mes][fecha.dia][fecha.hora].usuario.nombre,usuario.nombre);
  105.                                         strcpy(matriz_reservas[fecha.mes][fecha.dia][fecha.hora].usuario.apellido,usuario.apellido);
  106.                                         strcpy(matriz_reservas[fecha.mes][fecha.dia][fecha.hora].usuario.ext,usuario.ext);
  107.                                         usuario.ult_reserva=fecha;
  108.                                         printf("\n\nEl dia %d del mes %d a las %d la sala ha sido reservada por %s %s\n\n"
  109.                                                    ,fecha.dia,fecha.mes,fecha.hora,matriz_reservas[fecha.mes][fecha.dia][fecha.hora].usuario.nombre,matriz_reservas[fecha.mes][fecha.dia][fecha.hora].usuario.apellido);
  110.                                     }
  111.                                     else printf("\nReserva no realizada\n");
  112.                                 }
  113.                                 else printf("\nFecha no disponible\n");
  114.                             }
  115.                             break;
  116.                         case 5:
  117.                             if (usuario.nombre[0]==0) printf("\a\nIntroduzca primero sus datos\n\n");
  118.                             else
  119.                             {
  120.                                 do
  121.                                 {
  122.                                     printf("\nDatos de la reserva a borrar:\n   Mes: ");scanf("%d",&fecha.mes);
  123.                                     printf("   Dia: ");scanf("%d",&fecha.dia);
  124.                                     printf("   Hora (de 8 a 20): ");scanf("%d",&fecha.hora);
  125.                                     if ((validar_fecha(fecha)) || ((fecha.hora<21) && (fecha.hora>7))) break;
  126.                                     else printf("\a\nFecha u hora incorrecta\n");
  127.                                 }while(1);
  128.                                 if (matriz_reservas[fecha.mes][fecha.dia][fecha.hora].ocupado==0) printf("\nNo hay ninguna reserva para esta fecha y esta hora\n");
  129.                                 else
  130.                                 {
  131.                                     if ((strcmp(matriz_reservas[fecha.mes][fecha.dia][fecha.hora].usuario.nombre,usuario.nombre)==0) &&
  132.                                                     (strcmp(matriz_reservas[fecha.mes][fecha.dia][fecha.hora].usuario.apellido,usuario.apellido)==0))
  133.                                     {
  134.                                         printf("\n\nEl dia %d del mes %d a las %d la sala ha sido reservada por %s %s\n\n",
  135.                                         fecha.dia,fecha.mes,fecha.hora,matriz_reservas[fecha.mes][fecha.dia][fecha.hora].usuario.nombre,
  136.                                         matriz_reservas[fecha.mes][fecha.dia][fecha.hora].usuario.apellido);
  137.                                         printf("Borrar la reseva? (S/N): ");scanf("%s",&confirmacion);
  138.                                         if ((strcmp(&confirmacion,"S")==0) || (strcmp(&confirmacion,"s")==0))
  139.                                         {
  140.                                             matriz_reservas[fecha.mes][fecha.dia][fecha.hora].ocupado=0;
  141.                                             printf("\nReserva borrada\n");
  142.                                         }
  143.                                     }
  144.                                     else printf("\nNo se puede borrar la reseva ya que el usuario actual no coincide con el de la reserva\n");
  145.                                 }
  146.                             }  
  147.                             break;
  148.                         case 6: break;  
  149.                         default: printf("\a\nOpcion incorrecta\n");
  150.                             break;
  151.                     }
  152.                 }while(opcion!=6);
  153.             }
  154.             else printf("\a\n\nUsuario o Password incorrectos\n\n");
  155.         }
  156.         else if (opcion==2)
  157.         {
  158.             break;
  159.         }
  160.         else
  161.         {
  162.             printf("\a\nOpcion incorrecta\n");
  163.         }
  164.     }while(1);
  165.     printf("\nFIN DEL PROGRAMA\n\n");
  166. }


No me llega ni a imprimir el "1" por pantalla. Llevo probado mil cosas y no sé. Empiezo a desesperarme. No he puesto todas las funciones que tengo pa no liar.

Venga, un saludo y muchas gracias por adelantado!