que tienen una estructura definida en un encabezado de la siguiente manera:¿Por qué obtengo segfaults al declarar una estructura de forma global o externa?
#define LC_ERR_LEN 300
typedef struct dLC_ERRMSG {
short nr;
short strategy;
char tx[LC_ERR_LEN];
} LC_ERRMSG;
que utilizo en mi código como tal:
LC_ERRMSG err;
char *szError;
szError = strerror(sStatus);
snprintf(err.tx,LC_ERR_LEN," %s - %s",szFilename,szError);
/* do something with our error string */
que funciona. Sin embargo, si declaro LC_ERRMSG err;
en todo el mundo, es decir, fuera de la función que se utiliza, o incluso extern LC_ERRMSG err;
(que era mi intención original, ya que me gustaría poder leer el estado de error en una ubicación central), el código segfaults en el snprintf llamada.
¿Puede darme alguna pista de por qué?
ddd me dice que la memoria se inicializa a todos los ceros cuando se declara globalmente, o al menos se inicializa y se puede leer cuando se declara extern. Los valores szFilename, szError y LC_ERR_LEN son todos correctos y significativos.
Parece C, no C++? –
Y los nombres de las variables parecen un gato caminando por el teclado. –
Es un gato húngaro, y estoy seguro de que el gato de Freakzoid también. – maxwellb