c++ - descargar - ¿Obtener señales de SIGTRAP al azar(en MinGW-gdb) es un signo de corrupción de memoria?
mingw 64 (2)
Después de buscar en Google, me di cuenta de que esas sigtraps son las mismas advertencias que obtienes en MSVC ++ diciendo "Windows ha desencadenado un punto de interrupción en xxxx.exe. Esto puede deberse a una corrupción del montón, e indica un error blahblahblah" ...
Así que parece que sí, los sigtraps inesperados pueden indicar la corrupción de la memoria (bastante extraño ...)
Y encontré mi error también. El MM está en una biblioteca estática que está vinculada a un dll. Y esa lib estática y el dll están vinculados a mi exe. Así que había dos administradores de memoria, uno en mi exe y otro en mi dll. Si llama al método de incialización del MM. Inicializó el MM en mi exe pero no en el dll así que el dll fue sin init. Lo solucioné al no vincular mi ejecutor con esa biblioteca estática.
Escribí mi propio administrador de memoria contado de referencia c ++ (por diversión) y estoy seguro de que no es perfecto;). Y ahora, cuando intento usarlo, obtengo señales SIGTRAP aleatorias. Si comento cada línea que está conectada con ese administrador de memoria todo funciona bien. Obtener SIGTRAP-s en lugar de SIGSEGV es bastante extraño. Sé que los SIGTRAP-s se lanzan cuando el programa llega a un punto de interrupción, pero no se establece ningún punto de interrupción. Leí en otro hilo que las compilaciones de depuración de los exe y dll deben estar actualizadas. Están actualizados y no es la razón.
¿Alguien sabe por qué está sucediendo esto?
Me atrevería a suponer que podría estar llamando a implementaciones nuevas / eliminadas o malloc / free mal emparejadas. Así que su administrador de memoria asignó algo, pero cuando se libera la memoria, termina con la implementación predeterminada de eliminar / liberar.
Establezca un punto de interrupción en la señal y vea si hay una eliminación libre () o de operador en la pila y si esa es la implementación de dicha función que usted esperaría.