Closed santiagocruzb closed 5 years ago
Hola. No es algo tan raro. Es algo que puede pasar en C. El compilador de C genera código directamente para la máquina en la que compilas, y las reglas de asignación de memoria no son parte del estándar de C, sino que lo define la implementación de cada compilador, precisamente porque depende de cómo se puede hacer en cada arquitectura.
Por ejemplo, malloc
garantiza que te va a dar un trozo de memoria garantizado, pero el cómo se implementa lo decide la implementación del compilador de acuerdo a la máquina y sistema operativo en que compilas. Por eso un código compilado en C no es portable entre máquinas.
La consecuencia es que un ejecutable para cada máquina distinta se puede comportar de manera distinta en cuanto a su asignación de memoria. Lo que te está pasando es que tu programa debe tener algún mal uso de memoria en alguna parte, lo que en algunos ejecutables se manifiesta en un SEGFAULT y en otros no se manifiesta. Hasta ahora no se ha manifestado en el servidor, pero eso no implica que no podría ocurrir.
La recomendación es revisar la asignación, uso y liberación de memoria en tu programa. Una manera de detectar cuando ocurre un SEGFAULT es con la herramienta gdb
. Para usar gdb
primero debes recompilar todo tu código usando -g
. Por ejemplo,
gdb -g -o ejecutable código.c
Luego ejecutar
gdb ejecutable
Y una vez que estás en gdb
haces
run [parametros_si_hay]
El programa va a partir y si detecta un SIGSEGV
(señal de segmentation fault), se va a detener y te dirá la linea.
Si bien por ahora no te está pasando en el servidor, que es donde se corrige, te recomiendo revisarlo porque podría ocurrir en alguna ejecución posterior.
Ánimo y cuéntanos cómo te va
Hola! Para hacer esta tarea he usado 2 computadores (mac 10.10, mac 10.14) y el servidor del curso. He trabajado con un repositorio propio para ir guardando los cambios y cambiarme de computador. El problema es que entre al momento de ejecutar el programa ya compilado, en los 3 lugares me aparecen cosas distintas.
mac 10.10
mac 10.14
servidor
Da la casualidad que lo que muestra el servidor es lo correcto (los punteros, valores integers y strings son los esperados), pero no entiendo qué es lo que ocurre. Alguna idea de lo que puede estar ocurriendo? Saludos, gracias.