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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  (Ayuda) Programa crashea al acceder al último término de una matriz
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: (Ayuda) Programa crashea al acceder al último término de una matriz  (Leído 1,509 veces)
Seyro97

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
(Ayuda) Programa crashea al acceder al último término de una matriz
« en: 2 Octubre 2015, 07:41 am »

Hola a tod@s. El problema que tengo es que al acceder al último término de una matriz generada con 'malloc', el programa deja de funcionar.

Código
  1. matriz = (int **)malloc(orden * sizeof(int));
  2.  
  3. if(matriz == (int **)0) {
  4. printf("Error asignando memoria a la matriz (primer paso)");
  5. return 0;
  6. }
  7.  
  8. for(int i = 0; i < orden; i++) {
  9. matriz[i] = (int *)malloc(orden * sizeof(int));
  10.  
  11. if(matriz[i] == (int *)0) {
  12. printf("Error asignando memoria a la matriz (segundo paso)");
  13. return 0;
  14. }
  15. }

La variable 'matriz' es de tipo 'int **'. Cuando intento cambiar el valor de 'matriz[orden - 1][orden - 1], el programa se cierra inesperadamente (Windows). Estoy compilando con MinGW usando el siguiente comando:
Código
  1. gcc -Wall -std=c99 -o main.exe main.c

No me salta ningún 'Warning'.

La parte donde cambio los datos de la matriz es:

Código
  1. int tempValue;
  2. int *tempPointer;
  3.  
  4. for(unsigned int fila = 0; fila < orden; fila++) {
  5. for(unsigned int columna = 0; columna < orden;) {
  6. printf("\nIntroduzca el elemento fila %u columna %u: ", fila, columna);
  7.  
  8. if(scanf("%i", &tempValue) == EOF) {
  9. printf("\nLa proxima vez introduzca un numero valido.");
  10. } else {
  11. tempPointer = matriz[fila];
  12. tempPointer[columna] = tempValue;
  13.  
  14. columna++;
  15. }
  16. }
  17. }
  18.  
  19. Según el debugger, el programa crashea en


« Última modificación: 2 Octubre 2015, 08:28 am por Seyro97 » En línea

Carlos Peláez González. visita http://www.taringa.net/EnjoyC para muchos tutoriales!
Seyro97

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
Re: (Ayuda) Programa crashea al acceder al último término de una matriz
« Respuesta #1 en: 2 Octubre 2015, 08:11 am »

Ya sé en que me equivoqué jaja.

Os dejo el resultado:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct {
  5. int **elements;
  6. } Mat;
  7.  
  8. unsigned int IngresarMatriz(Mat *matriz);
  9. void ImprimirMatriz(Mat *matriz, unsigned int orden);
  10.  
  11. int main() {
  12. unsigned int orden = 0;
  13. Mat matriz;
  14.  
  15. orden = IngresarMatriz(&matriz);
  16.  
  17. if(orden == 0)
  18. return 1;
  19.  
  20. printf("%p", matriz);
  21.  
  22. ImprimirMatriz(&matriz, orden);
  23.  
  24. for(int i = 0; i < orden; i++)
  25. free((void *)matriz[i]);
  26.  
  27. free((void *)matriz);
  28.  
  29. return 0;
  30. }
  31.  
  32. unsigned int IngresarMatriz(Mat *matriz) {
  33. unsigned int orden;
  34. int *tempPointer;
  35. int tempValue;
  36.  
  37. printf("Introduzca el orden de la matriz cuadrada: ");
  38.  
  39. if(scanf("%u", &orden) == EOF) {
  40. printf("\nLa proxima vez introduzca un numero valido.");
  41. return 0;
  42. }
  43.  
  44. matriz->elements = (int **)malloc(orden * sizeof(int));
  45.  
  46. if(matriz->elements == (int **)0) {
  47. printf("Error asignando memoria a la matriz (primer paso)");
  48. return 0;
  49. }
  50.  
  51. for(int i = 0; i < orden; i++) {
  52. matriz->elements[i] = (int *)malloc(orden * sizeof(int));
  53.  
  54. if(matriz->elements[i] == (int *)0) {
  55. printf("Error asignando memoria a la matriz (segundo paso)");
  56. return 0;
  57. }
  58. }
  59.  
  60. for(unsigned int fila = 0; fila < orden; fila++) {
  61. for(unsigned int columna = 0; columna < orden;) {
  62. printf("\nIntroduzca el elemento fila %u columna %u: ", fila, columna);
  63.  
  64. if(scanf("%i", &tempValue) == EOF) {
  65. printf("\nLa proxima vez introduzca un numero valido.");
  66. } else {
  67. tempPointer = matriz->elements[fila];
  68. tempPointer[columna] = tempValue;
  69.  
  70. columna++;
  71. }
  72. }
  73. }
  74.  
  75. return orden;
  76. }
  77.  
  78. void ImprimirMatriz(Mat *matriz, unsigned int orden) {
  79. for(unsigned int fila = 0; fila < orden; fila++) {
  80. for(unsigned int columna = 0; columna < orden; columna++) {
  81. printf("\nEl elemento cuya fila es %u y cuya columna es %u tiene el valor de %i", fila, columna, matriz->elements[fila][columna]);
  82. }
  83. }
  84. }


« Última modificación: 2 Octubre 2015, 08:29 am por Seyro97 » En línea

Carlos Peláez González. visita http://www.taringa.net/EnjoyC para muchos tutoriales!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Me crashea el programa « 1 2 »
Programación C/C++
jaxoR 16 6,719 Último mensaje 14 Marzo 2014, 07:02 am
por leosansan
Me crashea el programa
Programación C/C++
jaxoR 2 2,196 Último mensaje 30 Mayo 2014, 02:42 am
por Yoel Alejandro
(Ayuda) Programa crashea al analizar una cadena (char *) « 1 2 »
Programación C/C++
Seyro97 14 5,355 Último mensaje 27 Mayo 2015, 09:18 am
por Eternal Idol
(Ayuda) La función wglMakeCurrent(NULL, NULL) crashea el programa a veces
Programación C/C++
Seyro97 1 1,874 Último mensaje 10 Junio 2015, 15:34 pm
por Eternal Idol
¿AYUDA por que este programa crashea?
Programación C/C++
Mozzard 9 1,921 Último mensaje 6 Octubre 2018, 10:50 am
por Beginner Web
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines