Problema redimensionando array

Iniciado por snake_linux, 25 Agosto 2015, 18:52 PM

0 Miembros y 3 Visitantes están viendo este tema.

snake_linux

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,

#include <stdio.h>
#include <stdlib.h>

void main() {

int **p;
p=(int **)malloc(sizeof(int *)*5);
int x;
for(x=0;x<5;x++){

p[x]=(int *)malloc(sizeof(int)*80);

}

p[3][45]=10;
printf("El numero guardado es %d\n", p[3][45]);

p=(int **)realloc(p, sizeof(int *)*8);
int y;
for(y=5; y<8; y++){

p[y]=(int *)malloc(sizeof(int)*30);

}
p[6][35]=25;
printf("Después de redimensionar %d\n", p[6][35]);

free(p);

}


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

Gracias de antemano, saludos.

ivancea96

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.

snake_linux

Cita de: 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.

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.

ivancea96

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.

snake_linux

Cita de: 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.

Gracias ya me ha quedado claro.

Saludos.

kondrag_X1

yo creo en este caso lo mejor sería usar listas enlazadas. Creas una lista y añades y eliminas elementos a antojo.