账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    关于Segmentation fault: 11的错误
    27
    0

    在一个循环的语句中出现Segmentation fault: 11的错误

    问题出现的平台版本及自己尝试过哪些方法

    平台版本: MacOSX 10.14
    尝试过的方法: 查看是否有内存未被释放;查看是否有越界访问

    相关代码

    isOperator 定义处

    bool BerryMath::isOperator(char c)
    {
        return (
                    c == '+' || c == '-' || c == '*' || c == '/' || c == '%' ||
                    c == '^' || c == '|' || c == '&'
                    );
    }
    

    出错函数的内容
    Segmentation fault: 11出现的位置再注释// Get the first value后面

    void BerryMath::expr::parse_expr(std::string s)
    {
        if (p != 0x0 && --p->use == 0) {
            delete p;
        }
        // Remove blank
        int i = 0;
        while (i < s.length() && BerryMath::isSpace(i)) {
            i++;
        }
        std::string token = "";
        token = "";
        // Get the first value
        while (i < s.length() && !BerryMath::isOperator(s[i])) {
            token += s[i];
            i++;
        }
        std::string v = token;
        std::cout << token << std::endl;
    //    std::cout << token << std::endl;
        token = "";
        // Get the operator
        while (i < s.length() && BerryMath::isSymbol(s[i])) {
            token += s[i];
            i++;
        }
        std::string op = token;
        // Remove blank
        while (i < s.length() && BerryMath::isSpace(s[i])) {
            i++;
        }
        // Get the next operator
        while (i < s.length() && BerryMath::isSymbol(s[i])) {
            token += s[i];
            i++;
        }
        std::string nextOp = token;
        // Get the next expression
        token = "";
        for ( ; i < s.length() ; i++) {
            token += s[i];
        }
        BerryMath::expr test(op,v);
        if (!token.empty()) {
            BerryMath::expr a("");
            a.parse_expr(token);
            *this = BerryMath::expr(
                        nextOp,
                        test,
                        a
                        );
        } else {
            *this = BerryMath::expr(
                        op,
                        v
                        );
        }
    //    std::cout << *this << std::endl;
    }

    我期望语法树创建成功,然而却出现了Segmentation fault: 11的错误

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部