0

Die while Schleife im Code gibt Segmentierung Fehler (weil tempiq ist NULL) .Ich kann nicht herausfinden, warum Tempiq ist NULL, wenn Iqueue-> Front richtige Werte anzeigt und ist nicht null (sicher).`iqueue-> Front 'zeigt den richtigen Wert an und ist nicht Null. Aber tempiq zeigt NULL und gibt Segmentierungsfehler. Warum?

 //......previous code 

     tempiq=iqueue->front; 
     cout<<"\n"<<iqueue->front->link<<""<<iqueue->front; 
     if(tempiq)// && iqueue->front) 
     cout<<"\n aaaaaaaaaaaaaaaaaaaa\t"; 
     while(tempiq) 
     { 
     //....rest of code 

Der vollständige Code als Referenz ist unten angegeben: (das obige Codesegment in der Hauptfunktion in dem letzten ist)

#include <vector> 
    #include <iostream> 
    #include <string.h> 
    #include <fstream> 
    #include <stdio.h> 
    #include <termios.h> 
    #include <sstream> 
    #include <unistd.h> 
    #include <cstdlib> 
    #include <ctype.h> 
    using namespace std; 
    #define NO_OF_CHARS 256 

    /* This function builds the TF table which represents Finite Automata for a 
     given pattern */ 
    void computeTransFun(char *pat, int M, int TF[][NO_OF_CHARS]) 
    { 
     int i, lps = 0, x; 

     // Fill entries in first row 
     for (x =0; x < NO_OF_CHARS; x++) 
      TF[0][x] = 0; 
     TF[0][pat[0]] = 1; 

     // Fill entries in other rows 
     for (i = 1; i<= M; i++) 
     { 
      // Copy values from row at index lps 
      for (x = 0; x < NO_OF_CHARS; x++) 
       TF[i][x] = TF[lps][x]; 

      // Update the entry corresponding to this character 
      TF[i][pat[i]] = i + 1; 

      // Update lps for next row to be filled 
      if (i < M) 
       lps = TF[lps][pat[i]]; 
     } 
    } 

    /* Prints all occurrences of pat in txt */ 
    int searchauto(char *pat, char *txt) 
    { 
     int M = strlen(pat); 
     int N = strlen(txt); 

     int TF[M+1][NO_OF_CHARS]; 

     computeTransFun(pat, M, TF); 
    int flag=0; 
     // process text over FA. 
     int i, j=0; 
     for (i = 0; i < N; i++) 
     { 
      j = TF[j][txt[i]]; 
      if (j == M) 
      { 
      return flag; 
      //printf ("\n pattern found at index %d", i-M+1); 
      } 
     } 
     return flag; 
    } 
    class Node 
    { 
     char content; 
     bool marker; 
     vector <Node*>children; 

     public: 
     Node(){ content='\0'; marker=false; } 
     ~Node(){} 

     void setContent(char c){content=c; } 
     void setMarker(){this->marker=true; } 
     char getContent(){return content; } 
     bool getMarker(){return marker; } 

     Node *findChild(char c); 

     void appendChild(Node *child)  
     { children.push_back(child); } 

     vector<Node *> getChildren() 
     { return children; } 


    }; 

    class Trie 
    { 
     public: 
     Node *root; 

     int abc; 
     void addWord(string s); 
     void deleteWord(string s); 
     bool searchWord(string s); 

     Trie(){ root=new Node(); } 
     ~Trie(){} 



    }; 


    Node *Node::findChild(char c) 
    { 
     for(int i=0; i< children.size(); i++) 
     { 
      Node *temp=children.at(i); 

      if(temp->content==c) 
       return temp; 
     } 
     return NULL; 
    } 

    void Trie:: addWord(string s) 
    { 
     //cout<<"\naddword called for "<<s<<"::::::::::::::::::::::::\n"; 
     Node *current=root; 

     if(s.length()==0) 
     { cout<<"\txxxx\t"; current->setMarker(); return ; } 

     for(int i=0;i<s.length();i++) 
     { 
      Node *child=current->findChild(s[i]); 
      if(child!=NULL) 
       current=child; 
      else 
      { 
       Node *tmp=new Node(); 
       tmp->setContent(s[i]); 

       current->appendChild(tmp); 
       current=tmp; 
      } 

      if(i==s.length()-1) 
       current->setMarker(); 

      cout<<"\ttrying\t"; 
     } 

     cout<<"\n word added\t"; 
    } 


    bool Trie::searchWord(string s) 
    { 
     cout<<"\nsearchWord called for "<<s<<endl; 
     Node *current=root; 
     cout<<"\n search started\t"; 
     cout<<endl; 
     while(current !=NULL) 
     { 
      cout<<"\t00\t"; 
      for(int i=0;i<s.length();i++) 
      { 
       cout<<s[i]<<" "; 
      Node *temp=current->findChild(s[i]); 
      if(temp==NULL) 
       return false; 

       current=temp; 
      } 
      cout<<endl; 
      int a; 
      // cin>>a; 

      if(current->getMarker()) 
      { 
       cout<<"String found......................................................................................................\n"; 
       return true; 
      } 
      else 
      { 
       cout<<"Sorry string not found in trie....................................................................................\n"; 
       return false; 
      } 

     } 
    } 

    struct node 
    { 
     struct node *next; 
     int rank; 
     int nopage; 
     Trie *trie; 
     string value; 
    }; 
    struct indexqueue 
    { 
     struct indexnode *front; 
     struct indexnode *rear; 
    }; 
    struct indexqueue *createindexqueue() 
    { 
     struct indexqueue *temp=new indexqueue; 
     temp->front=NULL; 
     temp->rear=NULL; 
     //temp->count=0; 
     return temp; 
    } 
    struct indexnode 
    { 
     int id; 
     int rank; 
     int *point2[]; 
     string link; 
     Trie *down; 
     struct indexnode *next; 
    }; 
    struct indexnode *createindexnode(string val) 
    { 
     struct indexnode *temp=new indexnode; 
     temp->next=NULL; 
     //temp->value=val; 
     //cout<<"Node created with val: "<<val<<endl; 
     return temp; 
    } 
    struct indexqueue *iqueue; 
    struct queue 
    { 
     struct node *front; 
     struct node *rear; 
     int count; 
    }; 
    struct node *createnode(string val) 
    { 
     struct node *temp=new node; 
     temp->next=NULL; 
     temp->value=val; 
     //cout<<"Node created with val: "<<val<<endl; 
     return temp; 
    } 
    struct queue *createqueue() 
    { 
     struct queue *temp=new queue; 
     temp->front=NULL; 
     temp->rear=NULL; 
     temp->count=0; 
     return temp; 
    } 
    struct queue *pop(struct queue *queue1) 
    { 
     struct node *temp=new node; 
     if(queue1->front==NULL) 
      return NULL; 
     else if(queue1->front==queue1->rear) 
     { 
      queue1->front=NULL; 
      queue1->rear=NULL; 
     } 
     else 
     { 
      queue1->front=queue1->front->next; 
     } 
     return queue1; 
    } 
    struct queue *push(string val, struct queue *queue1) 
    { 
     struct node *new1=createnode(val); 
     if(queue1->front==NULL && queue1->rear==NULL) 
     { 
      queue1->front=queue1->rear=new node; 
      queue1->rear=new1; 
      queue1->front=new1; 
      //cout<<"1\n"; 
     } 
     else 
     { 
      queue1->rear->next=new node; 
      queue1->rear->next=new1; 
      queue1->rear=queue1->rear->next; 
      //cout<<"2\n"; 
     } 
     queue1->count++; 
     return queue1; 
    } 

    void inserttrie(struct queue *queue1,string value,string collection[],int n) 
    { 
     struct node *temp=queue1->front; 
     while(temp!=NULL) 
     { 
      if(temp->value.compare(value)==0) 
      { 
       temp->nopage=n; 
       for(int i=0;i<n;i++) 
       temp->trie->addWord(collection[i]); 
      } 
     } 
    } 
    void display(struct queue *queue1) 
    { 
     if(!queue1->front) 
     { 
      cout<<"Queue empty\n"; 
      return; 
     } 
     struct node *temp=queue1->front; 
     while(temp) 
     { 
      cout<<temp->value<<"\n"; 
      temp=temp->next; 
     } 
    } 
    void pushindex(struct indexnode *temp) 
    { 
     if(iqueue->front==NULL && iqueue->rear==NULL) 
     { 
      iqueue->front=temp; 
      iqueue->rear=temp; 
     } 
     else 
     { 
      iqueue->rear->next=temp; 
      iqueue->rear=temp; 
     } 
    } 
    int search(struct queue* queue1,string val)  //returns 1 if val found in queue1 else 0 
    { 
     if(queue1->front==NULL) 
      return 0; 
     struct node *temp=new node; 
     temp=queue1->front; 
     while(temp) 
     { 
      if(val.compare(temp->value)==0) 
       return 1; 
      temp=temp->next; 
     } 
     return 0; 
    } 
    int globalcounter=23456; 
    struct queue *bot(struct queue *crawl,ifstream& infile,string text) 
    { 
     struct indexnode *newnode=new indexnode; 
     //cout<<"\n"<<text<<"\toooooooooooo\n"; 
     newnode->link=text; 
     newnode->down=new Trie; 
     newnode->down->abc=globalcounter++; 
     //cout<<"\n"<<newnode->link<<"\toooooooooooo\n"; 
     newnode->next=NULL; 
     //indexnode->nop=0; 
     //Trie *word=new Trie; 
     if(infile==NULL) 
      return NULL; 
     cout<<"BOT_START\n"; 
     string line; 
     string tri[10000]; 
     //char *v; 
     string v; 
     string mxy; 
     int n=0; 
     while(getline(infile,line)) 
     { 
      string link=""; 
      cout<<"\n "<<line<<"\t\n"; 
      int i=0,flag=0,flag1=0,x=0,m=0; 
      tri[x]=""; 
      for(i=0;i<line.length()-1;i++) 
      { 


        if(line[i]==' '||line[i]=='*' && line[i+1]=='*'||line[i]=='*'||line[i]==';'||line[i]=='.'||line[i]=='/') 
        { 
         x++; 
         //tri[x-1][m]='\0'; 
         //v+='\0'; 
         //cout<<"\n***********************************************************"<<v<<endl; 
         cout<<"\n"; 
         tri[x-1]=v; 
         newnode->down->addWord(v); 
         if(newnode->down->searchWord(v)) 
          { 
           int a; 
           cout<<"HHHHHHHHHHHHHUUUUUUUUUUUUUUUUUUUUUURRRRRRRRRRRRRRRRRRRRRAAAAAAAAAAAAAYYYYYYYYYYYYYY\n"; 
           cout<<newnode->down->abc<<endl; 
           //cin>>a; 
          } 
         mxy=v; 
         v=""; 
         m=0; 
         //tri[x]=""; 


        } 
       else 
        { 
         v+=line[i]; 
         //tri[x][m]=line[i]; 

         cout<<" "<<tri[x][m++]<<" "<<line[i]<<" "<<v; 

        } 
        //cout<<"\t.....miiii...miiii....."<<tri[x]<<"  "; 


       if(line[i]=='*' && line[i+1]=='*' && flag==0) 
       { 
        flag=1; 
        i+=2; 
       } 
       if(line[i]=='*' && line[i+1]=='*' && flag==1) 
       { 
        flag=0; 
        flag1=1; 
        i+=2; 
       } 
       if(flag==1 && flag1==0) 
       { 
        link+=line[i]; 
       } 
       if(flag1==1) 
       { 
        link+='\0'; 
        n++; 
        cout<<"\nLink:"<<link<<endl; 
        if(search(crawl,link)==0) 
        { 
         cout<<"Link not found in queue\n"; 
         crawl=push(link,crawl); 
        } 
        else 
         cout<<"Link found in queue\n"; 
        link=""; 
        flag1=0; 
       } 

       // 
       // 
       // 
       // 

      } 
     } 
     int xt; 
     //newnode->down=word; 
     if(!newnode->down) 
     { 
      int a; 
      cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"; 
      //cin>>a; 
     } 
     //cout<<"````````````````````````` "<<newnode->down->abc; 
     //int a; 
     //cout<<newnode->down; 
     //cin>>a; 

     /*if(newnode->down->searchWord(" ")||newnode->down->searchWord("This")||newnode->down->searchWord(mxy)) 
     { 
      int a; 
      cout<<"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD\n"; 
      cin>>a; 
      cin>>a; 
     }*/ 
     //cout<<newnode->down->root->getMarker(); 
     //cin>>a; 
     //cin>>xt; 
     //displayIndexQueue(); 
     pushindex(newnode); 
     infile.close(); 
     cout<<"BOT_END\n"; 
     return crawl; 
    } 
    struct queue *merge(struct queue *queue1,struct queue *queue2) 
    { 
     if(queue1->front==NULL) 
      return queue2; 
     else if(queue2->front==NULL) 
      return queue1; 
     else 
     { 
      struct node *temp=queue2->front; 
      while(temp) 
      { 
       if(search(queue1,temp->value)==0) 
        queue1=push(temp->value,queue1); 
       temp=temp->next; 
      } 
      /*queue1->rear->next=queue2->front; 
      queue1->rear=queue1->rear->next;*/ 
      return queue1; 
     } 
    } 
    /*struct queue *checkduplicate(struct queue *queue1,struct queue *queue2) 
    { 
     if(queue1->front==NULL || queue2->front==NULL) 
      return NULL; 
     struct queue *tempqueue=createqueue(); 
     struct node *temp=queue1->front; 
     while(temp) 
     { 
      if(search(queue2,temp->value)==0) 
      { 
       tempqueue=push(temp->value,tempqueue); 
      } 
      temp=temp->next; 
     } 
     return tempqueue; 
    }*/ 
    struct queue *spider(struct queue *crawl,ifstream& infile,string text) 
    { 
     struct queue *queue1=createqueue(); 
     if(infile==NULL) 
      return NULL; 
     queue1=bot(queue1,infile,text); 
     if(queue1->front==NULL)   //check whether there are no links in the queue1 
      return crawl; 
     cout<<"SPIDER:Linked list returned by bot:\n"; 
     display(queue1); 
     cout<<"\n"; 
     cout<<"SPIDER:Displaying crawl before merge:\n\n"; 
     display(crawl); 
     crawl=merge(crawl,queue1); 
     //queue1=checkduplicate(queue1,crawl); 
     cout<<"SPIDER:Displaying crawl after merge:\n\n"; 
     display(crawl); 
     cout<<"\n"; 
     struct node *temp=queue1->front; 
     while(temp) 
     { 
      ifstream infile1; 
      char *link=new char[((temp->value).length())+1]; 
      strcpy(link,(temp->value).c_str()); 
      infile1.open(link); 
      cout<<"Spider is inside : "<<link<<endl; 
      crawl=spider(crawl,infile1,string(link)); 
      temp=temp->next; 
     } 
     return crawl; 
    } 
    void displayIndexQueue() 
    { 
     if(iqueue->front==NULL) 
     { 
      cout<<"iqueue is empty----------------------------------------------\n"; 
      return; 
     } 
     struct indexnode *temp=iqueue->front; 
     while(temp) 
     { 
      cout<<temp->link<<endl; 
      //cout<<"6666666666666666666666666666666666666666666666666666666666666666666666\n"; 
      //if(temp->link=="/home/abhishek/Desktop/eco/testproject2_1_1.txt") 
      //{ 
       if(temp->down->searchWord("this")) 
       { 
        cout<<"this FOUND\n000000000000000000000000000=====================================================================000000000"; 
       } 
       if(temp->down->searchWord("This")) 
       { 
        cout<<"This FOUND\n000000000000000000000000000=====================================================================000000000"; 
       } 
       if(temp->down->searchWord("movie")) 
       { 
        cout<<"MOVIE FOUND\n000000000000000000000000000=====================================================================000000000"; 
       } 
       cout<<"INSIDE IF OF displayIndexQueue\n"; 
      //cout<<endl<<temp->link<<" &&&&&&&&&&& "; 
      temp=temp->next; 
     } 
    } 
    struct user 
    { 
     string first_name; 
     string last_name; 
     int age; 
     string email; 
     string password; 
    }; 
    struct user users[100]; 
    int globalcount; 
    int validatename(string name) 
    { 
     int len=name.length(),flag=0,i=0; 
     while(flag==0 && i<len) 
     { 
      if(!((name[i]>='a' && name[i]<='z') || (name[i]>='A' && name[i]<='Z'))) 
      { 
       flag=1; 
       break; 
      } 
      i++; 
     } 
     if(flag==0) 
     { 
      return 1; 
     } 
     else 
     { 
      return 0; 
     } 

    } 
    int validateemail(string email) 
    { 
     if(!((email[0]>='a' && email[0]<='z') || (email[0]>='A' && email[0]<='Z'))) 
      return 0; 
     int len=email.length(); 
     int a=0,b=0,c=0; 
     for(int i=0;i<len;i++) 
     { 
      if(email[i]=='@') 
       a=i; 
      else if(email[i]=='.') 
       b=i; 
     } 
     if(b<a+2) 
      return 0; 
     if(b==len-1 ||b==len-2) 
      return 0; 
     return 1; 
    } 
    int getch() { 
     struct termios oldt, newt; 
     int ch; 
     tcgetattr(STDIN_FILENO, &oldt); 
     newt = oldt; 
     newt.c_lflag &= ~(ICANON | ECHO); 
     tcsetattr(STDIN_FILENO, TCSANOW, &newt); 
     ch = getchar(); 
     tcsetattr(STDIN_FILENO, TCSANOW, &oldt); 
     fflush(stdin); 
     return ch; 
    } 
    string inputpassword() 
    { 
     char password[100]; 
     for(int i=0;i<100;i++) 
     { 
      char ch; 
      ch=getch(); 
      if(ch=='\n') 
       break; 
      password[i]=ch; 
      cout<<"*"; 
     } 
     return (string)password; 
    } 
    int validatepassword(string password) 
    { 
     int a=0,b=0,c=0,d=0; 
     int len=password.length(); 
     if(len<6) 
      return 0; 
     for(int i=0;i<len;i++) 
     { 
      if(password[i]>='A' && password[i]<='Z') 
       a++; 
      else if(password[i]>='a' && password[i]<='z') 
       b++; 
      else if(password[i]>='0' && password[i]<='9') 
       c++; 
      else 
       d++; 
     } 
     if(a==0 || b==0 || c==0 || d==0) 
      return 0; 
     return 1; 
    } 
    string encrypt(string input) 
    { 
     int len=input.length(); 
     for(int i=0;i<len;i++) 
     { 
      if(i%2==0) 
       input[i]=input[i]+5; 
      else 
       input[i]=input[i]-5; 
     } 
     return input; 
    } 
    string decrypt(string line) 
    { 
     int templ=line.length(); 
     int count_spaces=0,odd=0; 
     for(int i=0;i<templ;i++) 
     { 
      if(line[i]==' ') 
      { 
       odd=-1; 
       count_spaces++; 
      } 
      if(count_spaces==2) 
      { 
       if(line[i]!=' ') 
       { 
        line[i]=line[i]; 
       } 
      } 
      else 
      { 
       if(line[i]!=' ') 
       { 
        if(odd%2==0) 
         line[i]=line[i]-5; 
        else 
         line[i]=line[i]+5; 
       } 
      } 
      odd++; 
     } 
     return line; 
    } 
    int checkexisting(string email) 
    { 
     cout<<"checkexisting called\n"; 
     for(int i=0;i<=globalcount;i++) 
     { 
      if(users[i].email.compare(email)==0) 
      { 
       cout<<"checkexisting returning 1\n"; 
       return 1; 
      } 
     } 
     cout<<"checkexisting returning 0\n"; 
     return 0; 
    } 
    struct user *sign_up() 
    { 
     string first_name1,last_name1,email1,password1,password2; 
     int age1; 
     char test; 
     cout<<"\nHere are a few syntax rules for signing up on Black Box:\n"; 
     cout<<"1.Age must not be less than 12 years.\n"; 
     cout<<"2.First name and Last name fields will accept only alphabets.\n"; 
     cout<<"3.email address must be of the form '[email protected]'.\n"; 
     cout<<"4.Password must be at least 6 characters in length and must include at least one upper case"; 
     cout<<" alphabet,one lower case alphabet,one numeral and one special character.\n\n\n"; 
     cout<<"First Name: "; 
     getline(cin,first_name1); 
     while(validatename(first_name1)==0) 
     { 
      cout<<"Invalid first name entered.\n"; 
      cout<<"\nFirst name can have only alphabets(no spaces,no special characters and no numerals.\n"; 
      cout<<"Enter your first name again: "; 
      getline(cin,first_name1); 
     } 
     cout<<"\nLast Name: "; 
     getline(cin,last_name1); 
     while(validatename(last_name1)==0) 
     { 
      cout<<"Invalid last name entered.\n"; 
      cout<<"\nLast name can have only alphabets(no spaces,no special characters and no numerals.\n"; 
      cout<<"Enter your last name again: "; 
      getline(cin,last_name1);  
     } 
     cout<<"\nAge: "; 
     cin>>age1; 
     if(age1<12) 
     { 
      cout<<"Sorry, but according to our TERMS OF USE, no user of age less than 12 can be allowed "; 
      cout<<"to create an account on Black Box.\n"; 
      return NULL; 
     } 
     fflush(stdin); 
     cin.ignore(); 
     cout<<"\nEmail address : "; 
     getline(cin,email1); 
     while(validateemail(email1)==0 || checkexisting(email1)==1) 
     { 
      if(validateemail(email1)==0) 
      { 
       cout<<"\nInvalid email entered.\n"; 
       cout<<"Email address can only be of the form [email protected]\n"; 
       cout<<"Enter the email address again: "; 
      } 
      if(checkexisting(email1)==1) 
      { 
       cout<<"\nEmail id already registered.\nChoose a new one.\n"; 
      } 
      cout<<"\nEnter Email address again: "; 
      getline(cin,email1); 
     } 
     cout<<"\nChoose a password: "; 
     password1=inputpassword(); 
     cout<<"\nRetype Password: "; 
     password2=inputpassword(); 
      while(validatepassword(password1)==0 || password1.compare(password2)!=0) 
      { 
       if(validatepassword(password1)==0) 
       { 
        cout<<"Invalid password enterd.\n"; 
        cout<<"Password must be at least 6 characters in length and must include at least"; 
        cout<<" one upper case alphabet,one lower case alphabet,one numeral and one special character.\n"; 
       } 
       if(password1.compare(password2)!=0) 
       { 
        cout<<"\nPasswords do not match.\n"; 
       } 
       cout<<"Enter the password again: "; 
       password1=inputpassword(); 
       cout<<"\nRetype Password: "; 
       password2=inputpassword(); 
      } 
     struct user *newuser=new user; 
     newuser->first_name=first_name1; 
     newuser->last_name=last_name1; 
     newuser->age=age1; 
     newuser->email=email1; 
     newuser->password=password1; 
     ofstream outfile("userfile.txt",ios::app); 
     if(outfile) 
     { 
      outfile<<encrypt(newuser->first_name)<<" "<<encrypt(newuser->last_name)<<" "<<newuser->age<<" "<<encrypt(newuser->email)<<" "<<encrypt(newuser->password)<<endl; 
     } 
     outfile.close(); 
     return newuser; 
    } 
    struct user extract(string line) 
    { 
     int len=line.length(); 
     int spaces=0; 
     string first="",last="",age="",email="",password=""; 
     for(int i=0;i<len;i++) 
     { 
      if(line[i]==' ') 
       spaces++; 
      else 
      { 
       if(spaces==0) 
        first+=line[i]; 
       else if(spaces==1) 
        last+=line[i]; 
       else if(spaces==2) 
        age+=line[i]; 
       else if(spaces==3) 
        email+=line[i]; 
       else 
        password+=line[i]; 

      } 
     } 
     struct user newuser; 
     newuser.first_name=first; 
     newuser.last_name=last; 
     stringstream convert(age); 
     newuser.age=0; 
     convert>>newuser.age; 
     newuser.email=email; 
     newuser.password=password; 
     return newuser; 
    } 
    int loadusers() 
    { 
     string line; 
     ifstream infile; 
     infile.open("userfile.txt"); 
     if(!infile) 
      return 0; 
     while(getline(infile,line)) 
     { 
      globalcount++; 
      line=decrypt(line); 
      users[globalcount]=extract(line); 
     } 
    } 
    int login() 
    { 
     string email,password; 
     char choice='y'; 
     while(choice=='y'||choice=='Y') 
     { 
      cout<<"\nEnter email address: "; 
      cin>>email; 
      cout<<"\nEnter password: "; 
      cin>>password; 
      int flag1=0,cur=-1; 
      for(int i=0;i<=globalcount;i++) 
      { 
       if(email.compare(users[i].email)==0 && password.compare(users[i].password)==0) 
       { 
        cur=i; 
        flag1=1; 
        break; 
       } 
      } 
      if(flag1==1) 
      { 
       cout<<"Welcome "<<users[cur].first_name<<endl; 
       break; 
      } 
      else 
      { 
       cout<<"Wanna try again?(y/n): "; 
       cin>>choice; 
      } 
     } 
     if(choice=='y'|| choice=='Y') 
      return 1; 
     else 
      return 0; 
    } 
    int account_info() 
    { 
     int choice=0,m=1; 
     cout<<"1.Sign up\n2.Log in\n3.Continue without an account\n4.Exit from Black Box.\nEnter your choice: "; 
     cin>>choice; 
     fflush(stdin); 
     cin.ignore(); 
     struct user *new_user=NULL; 
      switch(choice) 
      { 
       case 1: 
        new_user=new user; 
        new_user=sign_up(); 
        if(new_user==NULL) 
        { 
         cout<<"Sign up failed."; 
         choice=3; 
        } 
        else 
        { 
         cout<<"Successful Sign up.\n"; 
         ofstream outfile; 
         string newusernamefile="/home/aakash/project/users/"+encrypt(new_user->email)+".txt"; 
         //char *newusernamefile1=newusernamefile.c_str(); 
         outfile.open(newusernamefile.c_str()); 
         outfile<<new_user->first_name; 
         outfile.close(); 
         break; 
        } 
       case 2: 
        if(login()==1) 
        { 
         cout<<"Successful login.\n"; 
         break; 
        } 
        else 
        { 
         cout<<"Login failed.\n"; 
         choice=3; 
        } 
       case 3: 
        cout<<"Welcome to Black Box3.\n"; 
        break; 
       case 4: 
        exit(0); 
        break; 
       default: 
        cout<<"Wrong choice.\n"; 
      }; 
      if(new_user) 
      { 
       cout<<"\nThe details entered are:\n"; 
       cout<<new_user->first_name<<endl; 
       cout<<new_user->last_name<<endl; 
       cout<<new_user->age<<endl; 
       cout<<new_user->email<<endl; 
       cout<<new_user->password; 
      } 
      cout<<endl<<endl; 
     return 1; 
    } 
    void displayusers() 
    { 
     for(int i=0;i<=globalcount;i++) 
     { 
      cout<<"\n"<<users[i].first_name<<" "<<users[i].last_name<<" "<<users[i].age<<" "<<users[i].email<<" "<<users[i].password; 
     } 
     cout<<endl; 
    } 
    int main() 
    { 
     globalcount=-1; 
     int temp1=loadusers(); 
     if(globalcount!=-1) 
      displayusers(); 
     int temp=account_info(); 
     int a; 
     //cin>>a; 
     struct queue *crawl=createqueue(); 
     iqueue=new indexqueue; 
     iqueue->front=NULL; 
     iqueue->rear=NULL; 
     string text; 
     text="inputproject.txt"; 
     ifstream infile; 
     infile.open("inputproject.txt"); 
     if(!infile) 
     { 
      cout<<"inputproject.txt not open\n"; 
      return 0; 
     } 
     else 
      cout<<"inputproject.txt successfully opened\n"; 
     crawl=spider(crawl,infile,text); 
     cout<<"Hey\n"; 
     if(crawl->front==NULL) 
      return 1; 
     cout<<"main:Displaying crawl\n"; 
     Trie *dummy=new Trie; 
     dummy->addWord("movie"); 
     dummy->addWord("harry potter"); 
     dummy->addWord("rajnikanth"); 
     if(dummy->searchWord("movie")) 
     { 
      cout<<"MOVIE FOUND IN DUMMY^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n\n"; 
     } 
     if(dummy->searchWord("harry potter")) 
     { 
      cout<<"harry potter FOUND IN DUMMY^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n\n"; 
     } 
     if(dummy->searchWord("rajnikanth")) 
     { 
      cout<<"rajnikanth FOUND IN DUMMY^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n\n"; 
     } 
     cout<<iqueue->front->down; 
     display(crawl); 
     displayIndexQueue(); 
    string searchstring; 
    cout<<"\n Enter the string you want to enter\t"; 
    getline(cin,searchstring); 

    string arraystring[20];int m=0,n=0; 
    for(int i=0;i<20;i++) 
     arraystring[i]=""; 
    for(int i=0;i<searchstring.length();i++) 
    { 
     cout<<"\n segregating string\t"; 
     if(searchstring[i]==' ') 
     { 
      m=m+1; 
      arraystring[m]=""; 
      cout<<"AAAAAAAAAAA\n"; 
     } 
     else 
     { 
      arraystring[m]+=searchstring[i]; 
      cout<<"BBBBBBBBBBBB\n"; 
     } 
     /*if((searchstring[i]>='a'&&searchstring[i]<='z')||(searchstring[i]>='A'&&searchstring[i]<='Z')||searchstring[i]=='/'||searchstring[i]=='_') 
      { 
       arraystring[m]+=searchstring[i] ; 
       cout<<"\n adding to array\t"; 
      } 
     else 
     { 
      m++; 
      //n=0; 
      cout<<"\n incrementing 1\t"; 
     }*/ 
    } 

    //Searching for individual string to be as a part of links we crawled "State Automata Search" 
    cout<<"\n"<<iqueue->front->link<<"\n-------------------\t"; 
    indexqueue iqu[m]; 
    struct indexnode *tempiq; 
    for(int x=0;x<m;x++) 
    { 
     cout<<"\n 11111111111111\t"; 

     //iqu[x]=new createindexqueue(); 
     //=createindexnode(" "); 
     tempiq=iqueue->front;      //above mentioned code segment 
     cout<<"\n"<<iqueue->front->link<<""<<iqueue->front<<"\t________________________"; 
    if(tempiq)// && iqueue->front) 
     cout<<"\n aaaaaaaaaaaaaaaaaaaa\t"; 
     while(tempiq) 
     { 
      cout<<"\n entered the tempiq inorder to search\t"; 
      indexnode *temp; 
      temp=(iqu[x].front); 
      char *c,*c2; 
      strcpy(c,(tempiq->link).c_str()); 
      strcpy(c2,arraystring[x].c_str()); 
      if(searchauto(c2,c)) 
       { 
        cout<<"\n checking for automata\t"; 
        while(temp) 
        { 
         cout<<"\n entered while\t"; 
         if(temp->next!=NULL) 
         temp=temp->next; 
         else 
          { 
           cout<<"\n creaing indexes\t"; 
           indexnode *am=createindexnode(tempiq->link); 
           temp->next=am; 
          } 
        } 
       } 


      tempiq=tempiq->next; 
     } 
    } 

    for(int i=0;i<m;i++) 
    { 
     indexqueue q=iqu[i]; 
     indexnode *qt=q.front; 
     while(qt) 
     { 
      cout<<"---"<<qt->link<<"---"; 
      qt=qt->next; 
      cout<<"\n"; 
     } 

     cout<<"\n\n\n"; 
    } 
     //cout<<endl<<iqueue->front->down->abc<<endl; 
     //cout<<iqueue->rear->down->abc; 
     cout<<endl; 
     return 1; 
    } 
+0

Es würde helfen, den Rest des Codes zu teilen – Smeeheey

+0

Es ist zu beachten, dass Tempiq (nach der Zuordnung) ist sicher Null. –

+0

@Smeeheey, fügte den vollständigen Code Sir hinzu. –

Antwort

0

Ich bin nicht sicher, dass es das Problem, dass Ihre Segmentierung führt Schuld aber ... es ist ein Problem.

Mit den folgenden Anweisungen

 char *c,*c2; 
     strcpy(c,(tempiq->link).c_str()); 
     strcpy(c2,arraystring[x].c_str()); 
     if(searchauto(c2,c)) 

Sie schreiben, mit strcpy(), in ein paar undefined (c und c2 nicht initialisiert sind) und nicht zugeordneten Speicherbereiche.

Sind Sie sicher, dass Sie dieses Paar std::string in char * spitzem Bereich kopieren müssen?

In diesem Fall sollten Sie den benötigten Speicher reservieren; so etwas wie dieses

 char *c,*c2; 
     c = new char[(tempiq->link).size()+1U]; 
     c2 = new char[arraystring[x].size()+1U]; 
     strcpy(c,(tempiq->link).c_str()); 
     strcpy(c2,arraystring[x].c_str()); 
     if(searchauto(c2,c)) 

Aber denken Sie daran zu delete []c und c2.

Dies ist, wenn Sie wirklich ein paar zugewiesen char * benötigen.

Aber ich nehme an, Sie einfach den c_str() Wert des Paares von std::string zu searchauto() passieren kann

 if(searchauto((tempiq->link).c_str(), arraystring[x].c_str())) 

wenn Sie const die Parameter searchauto()

int searchauto(const char *pat, const char *txt) 

und die erste von computeTransFun() definieren

void computeTransFun(const char *pat, int M, int TF[][NO_OF_CHARS]) 

S.: Entschuldigung für mein schlechtes Englisch.

Verwandte Themen