elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección.


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  ¿AYUDA por que este programa crashea?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿AYUDA por que este programa crashea?  (Leído 277 veces)
Mozzard

Desconectado Desconectado

Mensajes: 17


Ver Perfil
¿AYUDA por que este programa crashea?
« en: 5 Octubre 2018, 19:33 »

Es un trabajillo para el insti por si veis alguna parte inecesaria o forzada, la cosa es pone nota a cada alumno y guardar la nota de estos en un array:
Ej: El alumno 1 tiene la nota 9.
Pero al poner nota al 3r alumno me crashea, alguien sabe por que? Ni mi profe sabe que pasa no estoy de broma lol.
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int comparador(int n ){
  4. if(n<=15 and n>0){
  5. return n;
  6. }else{
  7. printf("NUMERO INCORRECTO!\n");
  8. return 0;
  9. }
  10. }
  11.  
  12.  
  13.  
  14. int main(){
  15. printf("Cuantos alumnos hay? MAX 15 MIN 1: ");
  16. int num, v,i=0;
  17. scanf("%i", &num);
  18. v=num;
  19. int array[v];
  20. if(comparador(num) != 0){
  21. for(i;i<=v;i++){
  22. printf("Que nota ha sacado el alumno %i ?", i+1);
  23. scanf("%i", array[i]);
  24. }
  25. for (i=0;i<=v;i++){
  26. printf("El alumno %i ha sacado %i", i+1, array[i]);
  27. }
  28. }
  29. }
  30.  


« Última modificación: 6 Octubre 2018, 01:32 por simorg » En línea

OmarHack


Desconectado Desconectado

Mensajes: 1.269


Ver Perfil
Re: ¿AYUDA por que este programa crashea?
« Respuesta #1 en: 5 Octubre 2018, 19:46 »

Haces overflow.
Por culpa de scanf (&num)

No programo en C así que no sé indicarte la solución, busca en google.


« Última modificación: 5 Octubre 2018, 19:49 por OmarHack » En línea

I like to test things.
Mozzard

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: ¿AYUDA por que este programa crashea?
« Respuesta #2 en: 5 Octubre 2018, 22:33 »

Segun he visto overflow es que le metemos a la variable un valor mas alto del que puede, pero metemos como mucho 15, no deberia de dar error no?
En línea

OmarHack


Desconectado Desconectado

Mensajes: 1.269


Ver Perfil
Re: ¿AYUDA por que este programa crashea?
« Respuesta #3 en: 5 Octubre 2018, 23:07 »

&num no te da el valor de num. Lo que te da es la dirección de memoria en donde se guarda num.
La dirección de memoria es algo del tipo: 0x6fabcb73b484
En todo caso usa scanf("%s",num)

Cual es tu intención con scanf &sum?
No programo en C asique puede que lo que estoy diciendo no se aplique a C pero en C++ eso sería intentar sobrescribir la dirección de memoria en la que se almacena la variable por un numero que de el usuario. Lo cual no tiene sentido en este tipo de programas.

En línea

I like to test things.
Mozzard

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: ¿AYUDA por que este programa crashea?
« Respuesta #4 en: 5 Octubre 2018, 23:11 »

&num en scanf es poner el valor que introducimos en la direccion de memoria de num, por eso se pone &, ya entra en la sintaxi
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.325



Ver Perfil
Re: ¿AYUDA por que este programa crashea?
« Respuesta #5 en: 5 Octubre 2018, 23:21 »

No se puede dimensionar un array con una variable. Para eso está malloc y similares.

Si tú array tiene 15 elementos lo recorres desde 0 hasta 14, si llegas al 15 te has pasado.
En línea

while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}
OmarHack


Desconectado Desconectado

Mensajes: 1.269


Ver Perfil
Re: ¿AYUDA por que este programa crashea?
« Respuesta #6 en: 5 Octubre 2018, 23:29 »

Ya, pero parece que estas escribiendo en el propio puntero. No te lo puedo asegurar.
 
Si lo que pienso es cierto...
Prueba así a ver si no te crashea.
int i=0;
int *num=&i;
scanf("%d", num);
En línea

I like to test things.
Beginner Web

Desconectado Desconectado

Mensajes: 186


youtu.be/0YhflLRE-DA


Ver Perfil
Re: ¿AYUDA por que este programa crashea?
« Respuesta #7 en: 5 Octubre 2018, 23:57 »

Simples errores de sintaxis, pero la logica esta bien
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int comparador(int n ){
  4. if(n>0 and n<=15){
  5.  return n;
  6. }else{
  7.  printf("NUMERO INCORRECTO!\n");
  8.  return 0;
  9. }
  10. }
  11.  
  12. int main(){
  13. int num, v,i;
  14. printf("Cuantos alumnos hay? MAX 15 MIN 1: ");
  15. scanf("%i", &num);
  16. v=num;
  17. int array[v];
  18. if(comparador(num) != 0){
  19.  for(i=0;i<v;i++){
  20.   printf("Que nota ha sacado el alumno %d?:", i+1);
  21. scanf("%d",&array[i]);
  22.  }
  23.  for (i=0;i<v;i++){
  24.  printf("El alumno %i ha sacado %i\n",i+1, array[i]);
  25.  }
  26. }
  27. }
En línea

Código
  1. # Programador: Ana Kéldysh
  2. # Nacionalidad: Rusia
  3. # Edad: 14 años
  4. #!/bin/bash
  5. echo Hola
Código
  1. void como_la_realidad(short vida)
  2. {
  3. if(vida<=1)
  4. cout << "Entrando en el sueño";
  5. else{
  6. como_la_realidad(vida-1);
  7. cout << " del sueño";
  8. }
  9. }
Código
  1. System.out.println("La vida solo puede comprenderse al réves, pero debe vivirse hacia adelante");
Mozzard

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: ¿AYUDA por que este programa crashea?
« Respuesta #8 en: 6 Octubre 2018, 10:28 »

Ya he visto que has cambiado i<=v por i<v y el %d, por aprender y no volver a fallar me podrias decir por que pls?
El programa funciona perfectament ahora gracias!
En línea

Beginner Web

Desconectado Desconectado

Mensajes: 186


youtu.be/0YhflLRE-DA


Ver Perfil
Re: ¿AYUDA por que este programa crashea?
« Respuesta #9 en: 6 Octubre 2018, 10:50 »

Porque en C/C++ la primera posicion inicial de un arreglo/vector es 0,
Por ejemplo si declaras un arreglo de 4 elementos , este contendra elementos desde la osicion 0 a la 3 solamente, es decir las posiciones 0,1,2 y 3
En línea

Código
  1. # Programador: Ana Kéldysh
  2. # Nacionalidad: Rusia
  3. # Edad: 14 años
  4. #!/bin/bash
  5. echo Hola
Código
  1. void como_la_realidad(short vida)
  2. {
  3. if(vida<=1)
  4. cout << "Entrando en el sueño";
  5. else{
  6. como_la_realidad(vida-1);
  7. cout << " del sueño";
  8. }
  9. }
Código
  1. System.out.println("La vida solo puede comprenderse al réves, pero debe vivirse hacia adelante");
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines