发现一个自由拼音输入法错误


如果:

上图有6个词组,如果你这时候按Shift+1,就可以删除掉前面的“删除错误”这个词。“删除错误”是我自己造的,属于用户词组。
如果:
如果这时候输入Shift+3,自由拼音输入法就会出现下面的错误。
错误在自由拼音输入法源代码的HZmodenormal.c文件的DeletePhrase函数中,这个函数的功能是删除用户词组(用户词库)。里面有这样一段:
if(0 <--错误是这一句 lpKPh = (lpPYCand->aPhrase+wIdx)->lpKeyPH;
lpHZPh = (lpPYCand->aPhrase+wIdx)->lpHZPH;
if( ((LPBYTE)lpKPh >= (LPBYTE)lpMapFileBase
&& (LPBYTE)lpKPh < (LPBYTE)lpMapFileBase + MAX_PY_NUM*sizeof(KEYPH) ) || ((LPBYTE)lpKPh >= (LPBYTE)lpMapFileBase + 2*MAX_PY_NUM*sizeof(KEYPH)
&&(LPBYTE)lpKPh < (LPBYTE)lpMapFileBase + dwMapFileUsrOffset ) ) { lpHZPh->dwAttrib = 0;
wRet = 1;
}
else{
lpCurHZPh = lpKPh->lpHZPH; <--程序运行到这出错
。。。。。。
C语言是允许(0
这一句被C语言解释成:0
本来按Shift+3已经超出了选词范围,但(0 lpHZPH;这是在引用空指针。
把 if(0
自由拼音输入法的作者肯定是一时大意才会出现这样的错误,在这还是要感谢自由拼音输入法的作者李振春为我们免费提供的源代码。

没有评论:

发表评论