Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: snake_linux en 25 Agosto 2015, 18:52 pm



Título: Problema redimensionando array
Publicado por: snake_linux en 25 Agosto 2015, 18:52 pm
Bueno gracias a vuestra ayuda, he conseguido entender los arrays dinámicos, el caso es que he intentado crear un ejemplo de una matriz dinámica y redimensionarla.

La he redimensionado y funciona perfectamente, pero al redimensionarla, los 3 nuevos índices, cada subindices(punteros dentro de punteros), he hecho que sean de 30 elementos y no de 80, por lo que al referirme al elemento 35 me debería dar error, y no es así, funciona perfectamente,

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void main() {
  5.  
  6. int **p;
  7. p=(int **)malloc(sizeof(int *)*5);
  8. int x;
  9. for(x=0;x<5;x++){
  10.  
  11. p[x]=(int *)malloc(sizeof(int)*80);
  12.  
  13. }
  14.  
  15. p[3][45]=10;
  16. printf("El numero guardado es %d\n", p[3][45]);
  17.  
  18. p=(int **)realloc(p, sizeof(int *)*8);
  19. int y;
  20. for(y=5; y<8; y++){
  21.  
  22. p[y]=(int *)malloc(sizeof(int)*30);
  23.  
  24. }
  25. p[6][35]=25;
  26. printf("Después de redimensionar %d\n", p[6][35]);
  27.  
  28. free(p);
  29.  
  30. }

¿ Por que no da error? ¿he redimensionado mal la matriz?:

Gracias de antemano, saludos.


Título: Re: Problema redimensionando array
Publicado por: ivancea96 en 25 Agosto 2015, 19:17 pm
La memoria puede o no ser del programa. Si accedes a memoria del programa, no dará error. Si accedes a memoria a la que tu programa no puede acceder, puede dar error. No es fijo. Depende de las circunstancias.


Título: Re: Problema redimensionando array
Publicado por: snake_linux en 25 Agosto 2015, 19:24 pm
La memoria puede o no ser del programa. Si accedes a memoria del programa, no dará error. Si accedes a memoria a la que tu programa no puede acceder, puede dar error. No es fijo. Depende de las circunstancias.

Entonces, para que sirve redimensionar la matriz, ¿ para reservale una cantidad de memoria que solo va a usar la matriz y que así no hayan fallos ?

Gracias y saludos.


Título: Re: Problema redimensionando array
Publicado por: ivancea96 en 25 Agosto 2015, 20:28 pm
Utilizar memoria que no está reservada puede dar errores, no te asegura que no vaya a cambiar, y puede dañar el funcionamiento del programa.
Acceder a memoria que no reservaste puede hacer que modifiques memoria de otra variable de tu programa, por ejemplo.


Título: Re: Problema redimensionando array
Publicado por: snake_linux en 25 Agosto 2015, 21:20 pm
Utilizar memoria que no está reservada puede dar errores, no te asegura que no vaya a cambiar, y puede dañar el funcionamiento del programa.
Acceder a memoria que no reservaste puede hacer que modifiques memoria de otra variable de tu programa, por ejemplo.

Gracias ya me ha quedado claro.

Saludos.


Título: Re: Problema redimensionando array
Publicado por: kondrag_X1 en 25 Agosto 2015, 23:09 pm
yo creo en este caso lo mejor sería usar listas enlazadas. Creas una lista y añades y eliminas elementos a antojo.