-1

任意の長さの文字列のツリーを実装しようとしています。このコードは文字列 1、2、3、4 の長さで機能し
ますが、5 を超える長さでは機能しません。メイン ファイルはありますが、以下にエラーが表示されます。問題は、私が言おうとしているのは、なぜこのコードが長さ 4 の文字列まで機能するのかということですが、長さ 5 の文字列以上を入力すると、 出力の下にあるようなエラーが実際にスローされることです。

  1. 入れる
  2. 出口

選択肢を入力してください: 1

文字列を入力してください: 「std::out_of_range」のインスタンスをスローした後に呼び出される asdfg 終了 what(): basic_string::at

RUN FAILED (終了値 1、合計時間: 1 秒)


struct node
{
    string info;
    struct node *next[];
 }*front,*rear;
    void enqueue(string s)
        {
            node *p,*temp;
            p=new node[sizeof(node)];
            p->next[n.length()];
            p->info=s; 
            cout<<" pe "<<p->info;
            for (int i=0;i<n.length();i++)
            {
                p->next[i] = new node;
                p->next[i]=NULL;
            }
            if(front==NULL)
            {
                front=p;
                rear=p;
            }
            else
            {
                cout<<"cl"<<cl<<endl; 
                if(cl<n.length())
                    {
                    rear->next[cl]=p;
                    temp=rear->next[cl];
                    cout<<"chile-info "<<temp->info<<endl;
                    }   
            }      
        }
    void display()
{
    int k=0;
    node *t, *temp;
    t=front;

    if(front==NULL||rear==NULL)
    {
        cout<<"\nQueue Empty!!!";
    }
    else
    {
        temp=t;
       while(t!= NULL)
       {

           if(t->next[k] !=NULL)
           {
           temp=t->next[k]; 

           cout<<temp->info<<" ";
           }

           k++;
         if(k==n.length())
         {           
          k=0;
          t= t->next[k];
          temp=t;

         }

       }       
    }

}

int main(int argc, char** argv) {
int ch,len,x;
string string1;
    rear=NULL;
    front=NULL;
        cout<<"\n1. Insert\n2. Exit\n";
        cout<<"\nEnter Your Choice: ";
        cin>>ch;

        switch(ch)
        {
            case 1:
                    cout<<"\nEnter The String: ";
                    cin>>n;
                    len=n.length();
                    enqueue(n);
                    cout<<" len "<<len;
                    for(int p=1;p<=len;p++)
                    bnod+=pow(len,p);

                    cl=0;
                    for (x=0;x<len;x++)
                      {
                         string1=n.at(x);
                         enqueue(string1);
                         cl++;
                      }
                     display();


         cout<<"\n########################\n";
                    break;
            case 2:
                    exit(0);
                    break;
            default:
                    cout<<"\nWrong Choice!!! Try Again.";
        }
    return 0;
}
4

1 に答える 1

3

あなたがこれを書いたとき

        p=new node[sizeof(node)];
        p->next[n.length()];

あなたが実際に望んでいたのはこれです

        p = new node;
        p->next = new node*[n.length()];

これは意味がありません

            p->next[i] = new node;
            p->next[i]=NULL;

ノード オブジェクトを割り当ててから に割り当て、p->next[i]その次の行p->next[i]を NULL に割り当てます。ここで何を意図しているのかわかりませんが、これでしょうか。

            p->next[i] = new node;
            p->next[i]->next = NULL;

ポインターを使用して動的割り当てコードを記述するのは困難です。自分が書いたコードが実際に何をするのかを注意深く考える必要があります。

于 2013-11-11T12:42:38.057 に答える