falla de segmentación el 14.04, pero no falló el 10.04

falla de segmentación el 14.04, pero no falló el 10.04

Estoy usando Ubuntu 14.04 LTS de 64 bits y estoy escribiendo un programa de procesamiento de imágenes en C. Cuando ejecuto cualquier programa en la terminal, muestra una falla de segmentación (núcleo volcado).
El mismo programa se ejecuta bien en 10.04.

¿Alguna ayuda por favor?

$ cc -o out.e sub.c -lm
$ ./out.e
Segmentation fault (core dumped)

Respuesta1

Es difícil decir en detalle qué sucedió realmente, pero daré un ejemplo del tipo de problema.

Lo importante es que el programa funcionó en 10.04, pero falla en 14.0. El problema exacto podría ser diferente, pero similar y relacionado:

Algo va en contra de las reglas

El error "fallo de segmentación" generalmente significa que se accedió a alguna memoria que no pertenece al programa. Puede ser que tanto en el 10.04 como en el 14.04 haya habido un acceso ilegal a la memoria, pero no causó ningún problema en el 10.04.

Las reglas no se aplican estrictamente

Eso significaría que funcionó por casualidad en 10.04; Esto es muy posible, porque por muchas razones, la memoria cercana a la memoria "oficial" de su programa también puede pertenecer técnicamente a su programa.
Esto es para facilitarle el trabajo al compilador o hacer que el programa sea más rápido mediante un acceso más regular a la memoria.
De esta manera, se le puede permitir al programa hacer cosas que no está permitido hacer según el texto del programa.

La tolerancia puede cambiar

A qué memoria "no oficial" puede acceder sin un error de segmentación depende de la versión del compilador y de las versiones de la biblioteca, que han cambiado.

El caso más simple y común debería ser que haya un error en el programa donde un acceso a la memoria fue demasiado lejos, como acceder al byte después de una matriz por un error de uno por uno en el índice.

Resumen

El error existía antes, pero funcionó de todos modos.
Ahora no funciona y es solo un error normal que causa una falla de segmentación.

Un aspecto positivo: cuando funcionó, con el error, es posible que haya generado resultados incorrectos, lo cual es mucho peor que el bloqueo que ve ahora.


hacer cumplir las reglas

Un buen enfoque para depurar este tipo de problema es instrumentar el programa para hacer cumplir las reglas que no aplica el sistema de ejecución normal.
Una herramienta para hacer esto cuando se busca un problema con el acceso a la memoria esvalgrind(man valgrind).

información relacionada