Pourquoi ce programme est-il segfaulting?

J'ai écrit un programme appelé Mathtext. Ce programme donne en texte brut "style" par le transfert de certaines plages de caractères en Unicode gammes telles que les mathématiques letterlike symboles" pour produire de la plaine-texte en italique, en gras, serif, etc.

Il fonctionne comme une, ligne par ligne, interprète, comme une coquille, de la sortie de la traduction de la ligne après ligne est entré. Cela signifie que les fichiers peuvent être cat/canalisations à traduire l'intégralité d'un fichier, ainsi que le fait que vous pouvez quitter la "coque" en appuyant sur ^D, ce qui est détecté par stdin frapper les expressions du FOLKLORE.

Tout fonctionne. Cependant, lorsque j'appuie sur ^D et de sortie, il segmentation. J'ai encore du mal à saisir ce qui est à l'origine.

De la compilation avec -g -O0 aide un peu; je sais maintenant que le problème se pose à partir d'un strlen appel à transposer quand ^D est pressé. Toutefois, la transposition ne doit jamais être appelée au cours d' ^D, comme des expressions du folklore est vrai!

Program received signal SIGSEGV, Segmentation fault. 
__strlen_sse2 () ../sysdeps/x86_64/multiarch/../strlen.S:31 
31 ../sysdeps/x86_64/multiarch/../strlen.S: Aucun fichier ou répertoire. 
dans ../sysdeps/x86_64/multiarch/../strlen.S 
(gdb) où 
#0 __strlen_sse2 () ../sysdeps/x86_64/multiarch/../strlen.S:31 
#1 0x0000000000400b0e dans transpose (s=0x0, capsDelta=120263, smallDelta=120257, numDelta=0) à mathtext.c:58 
#2 0x0000000000400e2b en main (argc=2, argv=0x7fffffffe4b8) à mathtext.c:92
s'il vous plaît montrer le code autour de la ligne 92 de mathtext.c

OriginalL'auteur Delan Azabani | 2010-08-31