客户端数据校验器中的2个bug

本文介绍了一个客户端数据校验器中存在的两个问题:一是字母校验错误导致能输入汉字;二是内存泄漏问题,未正确释放校验器资源。文中提供了具体的代码修改建议。

在使用"客户端数据校验器"中提到的通用类时发现存在2个bug.

代码在validator.cpp中.


1.输入有效字符的控制时对字母(isalpha)的判定:
测试时发现可以输入汉字
int CValidatorBase::CheckChar(char ch) {
    if (v_ch_set_.empty())
        return 1;

    CAutoVector<CValidCharSet*>::iterator iter = v_ch_set_.begin();
    while(iter!=v_ch_set_.end()) {
        CValidCharSet *vcs = *iter;
        switch(vcs->type_) {
            case CS_DIGIT:
                if (isdigit(ch))
                    return 1;
                break;
            case CS_ALPHA:
                if (isalpha(ch)) ///< 原来是==0
                    return 1;
                break;
            default:
                if (strchr(vcs->chars_.c_str(),ch))
                    return 1;
        }
        iter++;
    }
    return 0;
}

2.退出时报内存泄漏
以CStringValidator为例.
校验器创建后,每绑定一个控件增加一次引用计数.但是,解除绑定时没有释放.增加在CBindControl析构中释放校验器.

CBindControl::~CBindControl() {
    if (validator_) validator_->Release();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值