una tipos servicio segmento segmentacion público producto practico objetivo mercado empresa ejemplo consumo clientes analisis c segmentation-fault

tipos - segmento el mercado público objetivo ejemplo



Se produjo un error de segmentación al ejecutar, pero fue exitoso al depurar (7)

He encontrado una falla de segmentación cableada. 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.

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, ¿podría alguien ayudarme? ¿Hay alguna situación que pueda ocurrir como mi caso: falla de segmentación en los terminales, aunque está bien en la depuración? Muchas gracias.

Gracias a 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é?


Compile con información de depuración y use gdb para identificar dónde ocurre el error al usar el volcado.


Es muy probable que estés golpeando algún tipo de Comportamiento Indefinido. Como ya han dicho otros, use Valgrind para depurar este problema. En primer lugar, busque los errores de ESCRIBIR NO VÁLIDO, ESCRIBIR NO VÁLIDO en la salida Valgrind. También emitirá pilas de llamadas adicionales cuando sucedan cosas malas en su código. Esto debería ayudar a entender la razón del error.


Este es probablemente el resultado de una variable no inicializada. (en la línea 14 de tu programa)


Pruebe los siguientes pasos:

  • escriba ulimit -c unlimited en un xterm (esto permite la creación de archivos core / postmorterm)

  • Inicie su programa (y déjelo funcionar): un archivo central ahora debe estar presente en el directorio.

  • gdb <yourprogram> <corefile> el depurador con gdb <yourprogram> <corefile>

  • escriba bt at gdb prompt para ver en qué línea se colgó.

  • (opcional) corrige el error.


También me enfrenté a este problema antes. No en Linux con el compilador de GCC, pero en Visual Studio 2005. Fue como si mi código se ejecutara correctamente en el modo de depuración mientras estaba en modo de lanzamiento (ejecución directa). El hecho es que cuando se depura el código, el depurador se ocupa de excepciones como Violación de acceso, matriz fuera de límite, etc., y no permite que el código se cuelgue. En el modo de ejecución directa, no hay nadie que se encargue de las excepciones y, por lo tanto, el código se cuelga.

Le sugiero que use printf para mostrar el resultado de la operación intermedia, ya que es la mejor forma de solucionar el problema de su código.

Espero que esto te ayude ... :-)


Por cierto: estás perdiendo memoria aquí. s1-> seq básicamente se está reasignando, pero se te olvida liberar el viejo recuerdo. Cambio:

s1->len += s2->len; tmp[s1->len] = ''/0''; s1->seq = tmp; return s1;

dentro:

void *del; // <<-- s1->len += s2->len; tmp[s1->len] = ''/0''; del = s1->seq; // <<-- s1->seq = tmp; free (del); // <-- return s1;

, Y al menos dejarás de gotear.


Si sabe cómo bloquearlo desde la terminal, puede hacer que cree un archivo central e inspeccionar el punto donde se estrelló así:

$ ulimit -c unlimited # to create a corefile $ yourprogram ... crash # this will create file "core" in the current directory $ gdb yourprogram core # shows the state at the moment of the crash

Pregunta sobre ese tema:

  • Información sobre dónde se encuentra el volcado principal
  • ¿Qué haces con un archivo core
  • ¿Cómo se generan los volcados del núcleo?