Debug Assertion Failed String下标超出范围链表

时间:2015-12-22 20:20:09

标签: c++ linked-list

我没有为输入5x ^ 7的链接列表分配值。

链接列表节点值; nodeValue1 = 5,nodeValue2 = x,nodeValue3 = 7.

表达式:字符串下标超出范围 行:1441

功能:链接列表写

nocomma(2015)

Aktar函数//指定多项式链表。

template <typename T>
void write(node<T>*front, const string &seperator="---->"){
    node <T>*curr;
    curr=front;
    while(curr!=NULL){
        cout<<curr->nodeValue1<<" "<<curr->nodeValue2<<" "<<curr->nodeValue3;
        curr=curr->next;
        if(curr!=NULL)
            cout<<" "<<seperator;
    }
}

//主

void Aktar(string s){
    int i=0,katsayi,derece;
    string kat,us;
    node <char>*front=NULL,*newNode;


    while(s[i]!='\0'){
        while(s[i]!='x'){
            kat+=s[i];
            i++;
        }

        if(s[i]=='x' && s[i+1]!='^')
            us='1';

        i++;//^ geçmesi için

        while(s[i]=='^'){
            us+=s[i+1];
            i++;
            if(s[i]=='-' || s[i]=='+')
                break;
        }

        katsayi=atoi(&kat[0]);
        derece=atoi(&us[0]);

        newNode=new node<char>(katsayi,'x',derece,front);
        front=newNode;
        katsayi=0;
        derece=0;
        kat=' ';
        us=' ';
    }

    write(front);


}

1 个答案:

答案 0 :(得分:0)

首先,您应该'\0'使用std::string进行比较。这些对象碰巧是空终止的,但这主要是允许与C API交互的黑客攻击。比较一个索引与s.size()或就迭代器而言,你会好得多。

你的实际问题可能是第一个嵌套循环(实际上,第二个嵌套循环有同样的问题)试图找到一个'x'字符:一旦输入外部while,代码就会继续寻找对于'x'而没有任何注意字符串的大小。它最终会触发调试异常,例如i == s.size()