Cuando tienes un puntero con una dirección de memoria erronea, esta puede apuntar a cualquier parte. Puede que esté intentando modificar la memoria del SO, o de algún programa que tengas funcionando, en cuyo caso, el sistema de protección de memoria del Sistema Operativo anula la operación y lanza un aviso (típica ventana de Widows de "aplicación tal ha ejecutado una operación no válida y debe cerrarse", o en el caso de Linux, un Segmentation Fault).
En otros casos, modifica la memoria del propio programa: puede apuntar a una variable que no es, a una parte de un fichero cargad, o como es tu caso, al código binario que se ha cargado en memoria.
Y hay otros casos en los que apunta a una dirección válida, pero no tiene un efecto visible ni incumple ninguna regla de protección, y todo va bien hasta que deja de ir. Unas veces se pueden repetir los pasos para que de el error, otras el fallo sale de forma "aleatoria", y estos últimos son dificiísimos de corregir.
En casos rarísimos, el código da fallo, pero al usar herramientas de debug, la inclusión de más datos en memoria hace que el error apunte a otro lado y funciona. Creo que sólo se ha dado un caso que yo conozca, a Momia si no me equivoco, hace cosa de un año o dos

Por eso te decía que comprobases punteros, valores que les pasas a las funciones UNLOAD_* y qué ID de texto le estás pasando a los DELETE_TEXT. Son las tres fuentes más probables de errores con punteros. Y después, el uso de arrays de Strings.