Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Violación de segmento con matriz

Estas en el tema de Violación de segmento con matriz en el foro de C/C++ en Foros del Web. Hola a todos, espero me puedan ayudar. Estoy intentando llenar una matriz de [5][5] de forma aleatoria y que luego imprima el resultado. El código ...
  #1 (permalink)  
Antiguo 07/09/2014, 13:55
 
Fecha de Ingreso: agosto-2014
Ubicación: Chile
Mensajes: 5
Antigüedad: 9 años, 8 meses
Puntos: 0
Violación de segmento con matriz

Hola a todos, espero me puedan ayudar.

Estoy intentando llenar una matriz de [5][5] de forma aleatoria y que luego imprima el resultado.
El código es el siguiente.

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void introduce(int matriz[][5]);
  5. void leer(int matriz[][5]);
  6.  
  7. int main(int argc, char const *argv[])
  8. {
  9.     int matriz[5][5];
  10.  
  11.     introduce(matriz);
  12.     leer(matriz);
  13.  
  14.     return 0;
  15. }
  16.  
  17. void introduce(int matriz[][5]){
  18.     int i, j;
  19.  
  20.     srand(time(NULL));
  21.  
  22.     for (i = 0; i < 5; ++i){
  23.         for (j = 0; j < 5; ++j){
  24.             matriz[i][j] = rand()%10;
  25.         }
  26.     }
  27. }
  28.  
  29. void leer(int matriz[][5]){
  30.     int i, j;
  31.  
  32.     for (i = 0; i < 5; ++i){
  33.         for (j = 0; j < 5; ++i){
  34.             printf("%i ", matriz[i][j]);
  35.         }
  36.         printf("\n");
  37.     }
  38. }

Al compilar no me manda ningún error
Código BASH:
Ver original
  1. metus@metus ~ $ gcc -o matriz matriz.c
  2. metus@metus ~ $

pero al ejecutarlo me salen estos resultados:
Código BASH:
Ver original
  1. metus@metus ~ $ ./matriz
Código Otro:
Ver original
  1. 0 6 0 0 9 32767 1496751813 32767 0 0 0 1761281253 0 32767 0 32767 -1759235576 0 -1759231058 32767 -1759230922 32767 -1759230773 32767 -1759229309 32767 -1759229037 32767 -1759228731 32767 -1759228555 32767 -1759228461 32767 -1759228264 32767 -1759228102 32767 -1759227967 0 16 0 100 0 5 0 0 0 12 0 1000 0 31 0 0 -1920327830 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1769108577 1397052255 1414415687 1212370517 1027885392 1028605518 1769109861 1163132977 1647275625 1263488835 1697998177 808530993 825636400 1431327829 926104900 1634296933 1936020015 1852397359 1414418243 1798254640 1162108755 995250002 1397489779 859517232 1030320186 825245039 876438627 976302139 1633892915 859666287 993079357 2053600302 708456755 993079357 1819553322 976302907 859517232 993079357 809335404 2053254698 708456755 825244978 1650811950 708456755 993079357 1918989102 708456755 993079357 2050436650 774519345 993079357 1886216750 708457779 993079357 1835169838 708457779 825245030 1987259946 892549937 809334883 1831742010 859517232 1031170925 708457779 993079357 879783214 976565051 993079357 1718837550 774519349 993079357 1768711726 708457779 892549937 809329783 1663969850 892549937 809334894 1865296442 909327152 809329505 1831742010 859516976 1029927021 774519350 909327152 809328999 2016291386 1230128223 1764713065 1966029417 762869102 1129272159 2036689711 1397966163 1701654380 796420462 1886221359 1380275029 1599296588 1852793703 1634741876 1263748420 1937077349 1969318957 1953723747 1869900659 1697594707 792360044 1831822701 795631971 980314466 792358505 1936026977 1162084467 1819631974 1230258499 1831822701 1735357040 1852139876 3681606 942751044 1966030152 1969317477 1145897064 1815957071 1634100580 1313818963 133Violación de segmento

Espero me puedan ayudar.
  #2 (permalink)  
Antiguo 07/09/2014, 15:30
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 2 meses
Puntos: 5
Respuesta: Violación de segmento con matriz

Hola amigo.
bueno lo único que te faltaba era incluir la librería time.h ya que usas una de sus funciones que es time(NULL) para la semilla de srand y al leer en el segundo for te hacia falta la letra j por que pusiste la i y buen tu código que daría así.

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. void introduce(int matriz[5][5]);
  6. void leer(int matriz[5][5]);
  7.  
  8. int main(int argc, char const *argv[])
  9. {
  10.     int matriz[5][5];
  11.  
  12.     introduce(matriz);
  13.     leer(matriz);
  14.  
  15.     return 0;
  16. }
  17.  
  18. void introduce(int matriz[5][5]){
  19.     int i, j;
  20.  
  21.     srand(time(NULL));
  22.  
  23.     for (i = 0; i < 5; i++){
  24.         for (j = 0; j < 5; j++){
  25.             matriz[i][j] = rand()%10;
  26.         }
  27.     }
  28. }
  29.  
  30. void leer(int matriz[5][5]){
  31.     int i, j;
  32.  
  33.     for (i = 0; i < 5; i++){
  34.         for (j = 0; j < 5; j++){
  35.             printf("%d ",matriz[i][j]);
  36.         }
  37.         printf("\n");
  38.     }
  39. }

Bueno espero que te sirva.
Saludos.
Drewermerc.
  #3 (permalink)  
Antiguo 07/09/2014, 15:33
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Violación de segmento con matriz

Antes de hacer nada mas revisa tranquilamente tu codigo, concretamente la linea 33:

Código C:
Ver original
  1. for (j = 0; j < 5; ++i){

Te oriento un poco con una pregunta: para que el ++i si estas iterando las j?

Ahora la parte tecnica: para enviar un puntero al array tienes que recibir un puntero al primer elemento del array:

Código C:
Ver original
  1. void leer(int (*matriz)[5]) {
  2.     ...
  3. }

Compara esta declaracion de funcion con la que tu tienes en el codigo.

Y ademas supongo que te interesará reutilizar el codigo haciendo que la funcion no se limite a una matriz de 5x5, sino de nxm, solo tienes que recibir el nº de filas, de columnas y el array de filas x columnas:

Código C:
Ver original
  1. void leer(int n, int m, int a[n][m]) {
  2.     ...
  3. }

Espero que te sea de ayuda

Saludos
vosk
  #4 (permalink)  
Antiguo 07/09/2014, 15:36
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Violación de segmento con matriz

Ui perdon Drewermerc, es la segunda vez en dos dias que mientras escribo el post alguien responde antes :))

Saludos
vosk
  #5 (permalink)  
Antiguo 07/09/2014, 15:47
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 2 meses
Puntos: 5
Respuesta: Violación de segmento con matriz

No te preocupes Vosk también le hiciste recomendaciones que yo no, así se hace una mejor respuesta.
Saludos.
Drewermerc.
  #6 (permalink)  
Antiguo 07/09/2014, 15:50
 
Fecha de Ingreso: agosto-2014
Ubicación: Chile
Mensajes: 5
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: Violación de segmento con matriz

Muchas gracias a los 2, creo que son errores de novato, llevo pocos días intentando aprender C, supongo que suele suceder aveces.

Revisare el código en un rato y les comento como me fue.

Me fue bien, funciono tal cual los cambios que me dijeron que hiciera.

Última edición por Metus; 07/09/2014 a las 20:41

Etiquetas: matrices, segmento
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:24.