He encontrado un error de segmentación por cable. Estoy desarrollando un software en C usando Eclipse CDT. Cuando ejecuto mi programa en la terminal (Ubuntu 10, 64bits), simplemente informa "Error de segmentación". Sin embargo, cuando depuro usando gdb en Eclipse, va hasta el final y el resultado es correcto.Error de segmentación al ejecutar, pero éxito al depurar
Entiendo que podría haber muchas razones para las fallas de segmentación. Y lamento no poder mostrar mi código, ya que no sé dónde podría estar el problema ...
Pero, ¿alguien podría ayudarme? ¿Hay alguna situación que pueda suceder como mi caso? Error de segmentación en los terminales, aunque está bien en la depuración? Muchas gracias.
Gracias, todos. Pasaría algún tiempo aprendiendo valgrind. Acabo de arreglar el error reemplazando un malloc() por realloc(). La llamada es seguida por dos memcpy. ¿Esa es la razón? Aquí está el código de fragmento:
bwa_seq_t *merge_seq (bwa_seq_t *s1, bwa_seq_t *s2) {
ubyte_t *seq1, *seq2, *tmp;
if (!s1 || !s2)
return 0;
seq1 = s1->seq;
seq2 = s2->seq;
tmp = (ubyte_t*) calloc (sizeof(ubyte_t), (s2->len + s1->len + 1));
memcpy(tmp, seq1, sizeof(ubyte_t) * s1->len);
memcpy(&tmp[s1->len], seq2, sizeof(ubyte_t) * s2->len);
s1->len += s2->len;
tmp[s1->len] = '\0';
s1->seq = tmp;
return s1;
}
¿Alguien podría ayudar a explicar por qué?
Es probable que haya una acumulación de pila y/o montón. Asegúrese de habilitar advertencias completas en su compilador y tratar con todas ellas. Argumentos incompatibles con 'printf' y cosas por el estilo son cosas que hay que tener en cuenta. – Mat
Ejecute su programa en [valgrind] (http://valgrind.org/), el problema probablemente sea evidente. – Hasturkun