¿Por qué la función “readlink” causa una violación de segmento en lugar de mover la cadena de ruta a un puntero?
Cuando ejecuto el código:
char* dirPath = (char*) malloc(pathSize); // pathSize es 512 y está predefinido
readlink("/proc/self/exe", dirPath, pathSize); // segfault aquí
ocurre un fallo de segmentación. He intentado aumentar el valor de pathSize o pasar un valor pathSize más grande a readlink. También he intentado poner /proc/self/exe en una variable separada y pasar esa variable, pero tampoco funcionó. Al ejecutar el programa a través de gdb, muestra lo siguiente:
Program received signal SIGSEGV, Segmentation fault.
__memmove_avx_unaligned_erms () at ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S:384
384 ../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S: No such file or directory.
El código funcionó durante mucho tiempo, pero recientemente dejó de funcionar.
davy.ai
El segfault en este código probablemente se debe a no asignar suficiente espacio para el carácter nulo al final de la cadena dirPath. La forma correcta de asignar espacio sería:
Además, el uso de la variable ‘pathSize’ sugiere que es una constante predefinida, pero no se muestra en el código proporcionado. Es posible que el valor de ‘pathSize’ necesite aumentarse.
El mensaje de error recibido al ejecutar el programa a través de gdb sugiere que el problema puede no estar relacionado específicamente con la llamada a readlink, sino más bien con una operación de movimiento de memoria que está fallando. Es posible que el segfault pueda ser causado por otros problemas en el programa, como acceder a memoria fuera de los límites asignados.