求助关于Dev-C++&MinGW64-w64(GCC 8.1.0)

回复帖子

@空界_无尽 2019-06-12 21:25 回复

为什么我调试代码的时候会出现这个崩溃啊?

求助。。(二楼放代码)

@空界_无尽 2019-06-12 21:30 回复 举报

前言:我去网上下载了一个MinGW-w64的包,把Dev-C++ 5.11的原来的编译器换掉了,然后就出现了这个问题。

我实在是不想用原来的GCC 4.9.2了,调试根本没法查看STL的变量值。

我调试的是高精模板,在除法调试的时候会出现这个问题,求助是我代码问题还是我没有安装某个GCC 8.1.0需要的环境。。。

    class INT
    {
        protected:
            vector <short> que;
            bool flag;
            UI size()const
            {
                return que.size();
            }
            void count()
            {
                while(que.size()>1&&!que[que.size()-1])
                    que.pop_back();
            }
        public:
            INT()
            {
                que.clear();
                que.push_back(0);
                flag=1;
            }
            INT(const char *num)
            {
                *this=num;
            }
            INT(const int &num)
            {
                *this=num;
            }
            INT(const long long &num)
            {
                *this=num;
            }
            INT operator=(const INT &num)
            {
                que=num.que;
                flag=num.flag;
                return *this;
            }
            INT operator=(const string &num)
            {
                int i=(num[0]=='-');
                que.clear();
                flag=!i;
                for(int now=num.size()-1; now>=i; now--)
                    que.push(num[now]-'0');
                return *this;
            }
            INT operator=(const char *num)
            {
                int i=(num[0]=='-');
                que.clear();
                flag=!i;
                for(int now=strlen(num)-1; now>=i; now--)
                    que.push(num[now]-'0');
                return *this;
            }
            INT operator=(const int &num)
            {
                int tmp=num;
                tmp<0?flag=0,tmp=-tmp:flag=1;
                que.clear();
                if(tmp==0)
                {
                    que.push(0);
                    return *this;
                }
                while(tmp)
                    que.push(tmp%10),tmp/=10;
                return *this;
            }
            INT operator=(const LL &num)
            {
                LL tmp=num;
                tmp<0?flag=0,tmp=-tmp:flag=1;
                que.clear();
                if(tmp==0)
                {
                    que.push(0);
                    return *this;
                }
                while(tmp)
                    que.push(tmp%10),tmp/=10;
                return *this;
            }
            INT operator+(const INT &num)const
            {
                if(flag^num.flag)
                {
                    INT tmp=flag?num:*this;
                    tmp.flag=1;
                    return flag?*this-tmp:num-tmp;
                }
                INT res;
                res.que.resize(max(size(),num.size())+1);
                for(UI i=0,temp=0; temp||i<(max(size(),num.size())); i++)
                {
                    res.que[i]+=que[i]+num.que[i];
                    res.que[i+1]+=res.que[i]/10;
                    res.que[i]%=10;
                }
                res.count();
                res.flag=flag;
                return res;
            }
            INT operator-(const INT &num)const
            {
                INT res;
                if(flag)
                    if(num.flag)
                    {
                        if(*this<num)
                        {
                            res=-(num-*this);
                            return res;
                        }
                    }
                    else
                    {
                        res=*this+(-num);
                        return res;
                    }
                else
                {
                    if(flag)
                        res=-((-*this)+num);
                    else
                        res=-num-(-*this);
                    return res;
                }
                res.que.resize(size()+2);
                for(UI i=0; i<size(); i++)
                {
                    res.que[i]+=que[i]-num.que[i];
                    if(res.que[i]<0)
                        res.que[i]+=10,res.que[i+1]--;
                }
                res.count();
                return res;
            }
            INT operator*(const INT &num)const
            {
                INT res;
                res.que.resize(size()+num.size()+2);
                for(UI i=0; i<size(); i++)
                    for(UI j=0; j<num.que.size(); j++)
                    {
                        res.que[i+j]+=que[i]*num.que[j];
                        res.que[i+j+1]+=res.que[i+j]/10;
                        res.que[i+j]%=10;
                    }
                res.count();
                res.flag=(flag==num.flag);
                return res;
            }
            INT operator/(const INT &num)const
            {
                INT now,res=*this;
                for(int i=size()-1; i>=0; i--)
                {
                    int j=0;
                    now=now*10+que[i];
                    for(; j<10; j++)
                        if(now<num*(j+1))
                            break;
                    res.que[i]=j;
                    now=now-num*j;
                }
                now.count();
                res.flag=(flag==num.flag);
                return res;
            }
            INT operator%(const INT &num)const
            {
                INT nowa=*this,nowb=num;
                nowa.flag=nowb.flag=1;
                INT res=nowa-nowa/nowb*nowb;
                res.flag=flag==num.flag;
                return res;
            }
            INT operator-()const
            {
                INT res=*this;
                res.flag^=flag;
                return res;
            }
            INT operator+=(const INT &num)
            {
                return *this=*this+num;
            }
            INT operator-=(const INT &num)
            {
                return *this=*this-num;
            }
            INT operator*=(const INT& num)
            {
                return *this=*this*num;
            }
            INT operator/=(const INT& num)
            {
                return *this=*this/num;
            }
            INT operator++()
            {
                *this=*this+1;
                return *this;
            }
            INT operator++(int)
            {
                INT old=*this;
                ++(*this);
                return old;
            }
            INT operator--()
            {
                *this=*this-1;
                return *this;
            }
            INT operator--(int)
            {
                INT old=*this;
                --(*this);
                return old;
            }
            bool operator<(const INT &num)const
            {
                if(flag^num.flag)
                    return num.flag;
                if(size()!=num.size())
                    return flag?size()<num.size():size()>num.size();
                for(int i=que.size()-1; i>=0; i--)
                    if(que[i]!=num.que[i])
                        return flag?que[i]<num.que[i]:que[i]>num.que[i];
                return !flag;
            }
            bool operator<=(const INT &num)const
            {
                return !(*this>num);
            }
            bool operator>(const INT &num)const
            {
                return num<*this;
            }
            bool operator>=(const INT &num)const
            {
                return !(*this<num);
            }
            bool operator==(const INT &num)const
            {
                return !(num!=*this);
            }
            bool operator!=(const INT &num)const
            {
                return *this>num||*this<num;
            }
            bool operator!()const
            {
                return *this>0?1:0;
            }
            string str()const
            {
                char ch;
                string res;
                for(UI i=0; i<size(); i++)
                    ch=(char)que[i]+'0',res=ch+res;
                if(res=="")
                    res="0";
                if(!flag&&res!="0")
                    res="-"+res;
                return res;
            }
    };
    istream& operator>>(istream &in,INT &now)
    {
        string ined;
        in>>ined;
        now=ined.c_str();
        return in;
    }
    ostream& operator<<(ostream &out,const INT &now)
    {
        out<<now.str();
        return out;
    }

请勿在意缩进

反馈
如果你认为某个帖子有问题,欢迎向洛谷反馈,以帮助更多的同学。



请具体说明理由,以增加反馈的可信度。