Ver Mensaje Individual
  #2 (permalink)  
Antiguo 19/08/2009, 05:08
tistklehoff
 
Fecha de Ingreso: agosto-2009
Mensajes: 67
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Duda tablas dinámicas

Hola...

Jejeje... buena la que has liado con los punteros... ;)

Veamos si consigo explicarte algo, que hace ya tiempo que dejé el C++ y puede que las explicaciones no sean correctas del todo.

En C / C++ los datos de un array se almacenan de forma 'aplanada', o sea, que donde acaba una fila empieza la siguiente. En realidad, una tabla no es más que un puntero (puedes probar a acceder a la posicion [0][0] sin poner corchetes) que apunta a la primera posición de tu array.

Lamentablemente, en C, a diferencia de Java, no pasa nada si tú te pasas de los límites del array (a fin de cuentas es un puntero a memoria) y tu puntero se va a tomar algo a otras zonas de memoria. Lo que haya en esas zonas ya es otra cuestión. Cuando lees el dato, la máquina te devuelve ese dato al que estás apuntando. ¿Que está 400Bytes más allá del que tú querías? ¡¡¡Ahhhh, se siente!!! También puede ser que la zona de memoria a la que intentas acceder esté protegida y entonces tendrás un error de lectura o escritura.

Además es incluso posible que corrompas los datos de otro de tus arrays que estás usando para el mismo programa.

En tu caso, acceder a la posición [2][20] no falla porque caerá dentro del segmento de memoria asignado a tu programa, pero la posición [20][2] está fuera de esa porción de memoria a la que tienes acceso, resultado: Error de segmentación.

En cuanto al error, parece que estás intentando liberar memoria de un puntero incorrecto. Depura para ver qué variable lo produce y vigila que no hayas asignado valores incorrectos, te hayas pasado de los límites de un array, asignado null al puntero correspondiente o liberado con anterioridad.


Espero que te sirva.

Un saludo y suerte.