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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ejercicio compila pero no se ejecuta
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Ejercicio compila pero no se ejecuta  (Leído 8,909 veces)
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Ejercicio compila pero no se ejecuta
« Respuesta #10 en: 10 Abril 2014, 21:31 pm »

Funciona!!! Muchísimas gracias.
Aunque no comprendo muy bien lo de punteros a punteros, pero eso es cuestión de estudiarlo mejor.

Ya que me lo dijiste, ¿es mejor hacer
Código:
int notasEnteras[alumnos];
como un array dinámico? Sólo lo uso para almacenar enteros. (perdona mi ignorancia)

Un saludo

Es otra alternativa a la que puede ponerse el pero de que algún compilador no la acepte. En general la uso para matrices normalitas. Si el tamaño es importante uso asignación dinámica de memoria.

Salu2!.


En línea

David8

Desconectado Desconectado

Mensajes: 50


Ver Perfil
Re: Ejercicio compila pero no se ejecuta
« Respuesta #11 en: 10 Abril 2014, 23:01 pm »

Es otra alternativa a la que puede ponerse el pero de que algún compilador no la acepte. En general la uso para matrices normalitas. Si el tamaño es importante uso asignación dinámica de memoria.

Salu2!.


Una última cosa, el compilador me da (en modo estricto) el siguiente warning:
Citar
54 9 [Warning] 'notas' is used uninitialized in this function [-Wuninitialized]

Respecto a:
Código:
char **notas;
*notas = malloc(alumnos * sizeof (char));

Un saludo.


En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Ejercicio compila pero no se ejecuta
« Respuesta #12 en: 10 Abril 2014, 23:13 pm »

Cambia:
Código
  1. *notas = malloc(alumnos * sizeof (char));

Por:
Código
  1. notas = malloc(alumnos * sizeof (char));
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
David8

Desconectado Desconectado

Mensajes: 50


Ver Perfil
Re: Ejercicio compila pero no se ejecuta
« Respuesta #13 en: 11 Abril 2014, 10:51 am »

Cambia:
Código
  1. *notas = malloc(alumnos * sizeof (char));

Por:
Código
  1. notas = malloc(alumnos * sizeof (char));

Una última cosa y ya doy por solucionada la duda.
Para liberar la memoria que uso cuando reservo con malloc tendré que usar free así no?
Código:
free(notas[i]);
después del
Código:
while(x == 0);
O uso
Código:
free(notas)
solamente?

Un saludo.
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Ejercicio compila pero no se ejecuta
« Respuesta #14 en: 13 Abril 2014, 16:30 pm »

Como ya te comentaron el problema principal se debe a que tratas de almacenar todas las lineas cuando lo único que haces con ellas es obtener (mediante atoi) un entero. Es mejor declarar un solo array de caracteres (ya lo haces, el array "nAlumnos") y reutilizar este cada vez que debas leer una linea de la entrada estándar.

Si con todo quieres utilizar memoria dinámica debes reservar primero la memoria del bloque principal y a continuación la memoria para cada linea. Antes de terminar el programa liberas la memoria de cada linea y por ultimo la del bloque principal. De esta forma:
Código
  1. /* ... */
  2.  
  3. #define TAMANIO  10
  4.  
  5. /* ... */
  6.  
  7. char nAlumnos[TAMANIO];
  8. int alumnos;
  9. int longitud;
  10. int x;
  11. int i;
  12. char **notas;
  13.  
  14. /* ... */
  15.  
  16. /* 1) Obtienes el numero de alumnos */
  17.  
  18. /* 2) Reservas el bloque de memoria principal */
  19. notas = malloc(alumnos * sizeof *notas);
  20.  
  21. /* 3) Reservas el bloque de memoria para cada alumno */
  22. for (i = 0; i < alumnos; i++)
  23.   notas[i] = malloc(TAMANIO);
  24.  
  25. /* 4) Realizas las operaciones del programa */
  26.  
  27. /* 5) Liberas la memoria utilizada por cada alumno */
  28. for (i = 0; i < alumnos; i++)
  29.   free(notas[i]);
  30.  
  31. /* 6) Liberas el bloque principal */
  32. free(notas);

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
David8

Desconectado Desconectado

Mensajes: 50


Ver Perfil
Re: Ejercicio compila pero no se ejecuta
« Respuesta #15 en: 20 Abril 2014, 22:47 pm »

Como ya te comentaron el problema principal se debe a que tratas de almacenar todas las lineas cuando lo único que haces con ellas es obtener (mediante atoi) un entero. Es mejor declarar un solo array de caracteres (ya lo haces, el array "nAlumnos") y reutilizar este cada vez que debas leer una linea de la entrada estándar.

Si con todo quieres utilizar memoria dinámica debes reservar primero la memoria del bloque principal y a continuación la memoria para cada linea. Antes de terminar el programa liberas la memoria de cada linea y por ultimo la del bloque principal. De esta forma:
Código
  1. /* ... */
  2.  
  3. #define TAMANIO  10
  4.  
  5. /* ... */
  6.  
  7. char nAlumnos[TAMANIO];
  8. int alumnos;
  9. int longitud;
  10. int x;
  11. int i;
  12. char **notas;
  13.  
  14. /* ... */
  15.  
  16. /* 1) Obtienes el numero de alumnos */
  17.  
  18. /* 2) Reservas el bloque de memoria principal */
  19. notas = malloc(alumnos * sizeof *notas);
  20.  
  21. /* 3) Reservas el bloque de memoria para cada alumno */
  22. for (i = 0; i < alumnos; i++)
  23.   notas[i] = malloc(TAMANIO);
  24.  
  25. /* 4) Realizas las operaciones del programa */
  26.  
  27. /* 5) Liberas la memoria utilizada por cada alumno */
  28. for (i = 0; i < alumnos; i++)
  29.   free(notas[i]);
  30.  
  31. /* 6) Liberas el bloque principal */
  32. free(notas);

Un saludo

Lo voy pillando poco a poco.
Muchas gracias por curraros tanto las respuestas :)

Un saludo.
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Compila bien, pero no ejecuta !! Solucionado
Java
Vingilot 4 4,167 Último mensaje 8 Enero 2008, 15:20 pm
por Vingilot
Como se compila y ejecuta un programa java en linux
Java
Dem0ny 2 9,433 Último mensaje 27 Noviembre 2008, 22:24 pm
por Amerikano|Cls
Problema en DevC++, compila pero no se ejecuta.
Programación C/C++
jairogon 9 34,996 Último mensaje 11 Julio 2010, 21:32 pm
por codeliber
compila y ejecuta bien, pero me muestra un caracter raro
Programación C/C++
pedroarcego 7 4,273 Último mensaje 7 Septiembre 2010, 11:28 am
por Garfield07
Compila pero no se ejecuta! Ayuda por favor.
Programación C/C++
durindemoria 7 3,801 Último mensaje 9 Diciembre 2015, 23:42 pm
por class_OpenGL
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines