Error con punteros y referencia (Segmentation fault (core dumped))

Re: Error con punteros y referencia (Segmentation fault (core dumped))

de Juan Cardelino -
Número de respuestas: 0

Cada vez más estoy convencido de que esta forma de proceder es la correcta. Es decir incentivar a que pregunten aunque lo solucionen. La explicación que proponés no es correcta. Respondo en dos partes, primero analizando tu respuesta y luego proponiendo una forma de encontrar el error.

1) Crítica a tu razonamiento: La dirección de memoria si es un int, o un tipo convertible. En cualquier caso no debería darte un error, como mucho un warning y menos un segmentation fault.

Es importante conocer que tipo de errores están correlacionados con cierto tipo de problemas. Nunca una conversion de tipos te va a dar un segmentation fault.

De todas formas, estas cosas es mejor no sólo razonarlas en el papel, sino experimentar. Tienen que tomarse esto como si fuera física. Uno plantea una proposición y la valida experimentalmente de forma rigurosa. Como prueba de esto, te propongo que agarres una variable común (no puntero) de diferentes tipos y le metas una dirección de memoria adentro. Ejemplo:

int c=&a; 

Luego varialo con el tipo de c. por ejemplo float c, char c, etc. Si tu razonamiento fuera válido, eso debería dar un problema.

2) En el fondo, en mi análisis de tu error, lo que hice fue diseccionar la "línea problemática" (*) y ver una de sus posibles partes. De eso concluyo que no fue problema de la parte de tipos, porque sin puntero anda. Ergo, el problema es el puntero. Pensá un poco mejor que significa *pa= algo y cuando puede fallar.

(*) Cuando hablo de la línea problemática, estoy validando un supuesto que hiciste, que el problema está en esa línea. Eso también necesita más rigor, deberías demostrar con un debugger que el problema está en esa línea. Muchas veces el programa se cae en lugares distintos a los cuales generan el problema. Es importante no dar nada por sentado y revisar todo.

Recomiendo particularmete usar el debugger, dejar que muera el programa y analizar los valores de las variables en ese momento. Eso te va a dar una pista.

La tentación en estos casos es adivinar que pasó, pero en realidad hay que aplicar un proceso sistemático de análisis, en parte de eso se trata el curso. Esto es crítico porque en general ningún error es lo que parece a simple vista.

 

Saludos,

            Juan