Hi,

I'm new to C++. plzz help me with this error.

#include <cstdlib>
#include <iostream>


#define clauselength 85
//we will use index number to find out the clause number.
//there are 88 clauses. as we start using index from 1 we have to add one to 89.

using namespace std;
string clause_variable_list[clauselength]=
{  
    "","ATTACK_FOUND","","","",
       "IP_SPOOFING_ATTACK","","","",
       "IS_SPOOFING_REFERS","","","",
       "IS_CALLER_ID_ATTACKS","","","",
       "IS_EMAIL_ADDRESS_REDIRECTING","","","",
       "SNIFFING_ATTACK","","","",
       "MATCH_IDENTIFICATION","","","",
       "ENCRYPT_EMAILS","","","",
       "MALWARE_ATTACK","","","",
       "IS_ANTIVIRUS_RUNNING","","","",
       "INSTALL_VIRUS_SCANNER","","","",
       "IS_ID_ON","","","",
       "TROJAN_ATTACK","","","",
       "IS_ATTACK_MALLICIOUS","","","",
       "IS_SYSTEM_PERFORMANCE_SLOW","","","",
       "IS_IT_DOS_ATTACK","","","",
       "IS_IT_PING_FLOOD","","","",
       "IS_IT_PING_DEATH","","","",
       "IS_SMURFING","","","",
       "IS_FRAGGLE","","","",
       "IS_IT_SYN_FLOOD","","",""
};

int getClauseNumber(string str, int afterindex=0)
{
     for(int i=afterindex+1; i<=84; i++)
     {
             if(str==clause_variable_list[i])
             {
                       return i;
             }
     }

     return -999;

}


class variable_list
{
      string name;
      string value;
      string inst;
      public:
             variable_list(string name="", string value="", string inst="NI")
             {
                                  this->name=name;
                                  this->value=value;
                                  this->inst=inst;
             }
             string getName()
             {
                    return name;
             }

             string getValue()
             {
                    return value;
             }
             string getInst()
             {
                    return inst;
             }
              void setName(string name)
              {
                   this->name=name;
              }
              void setValue(string value)
              {
                   this->value=value;
              }
              void setInst(string inst)
              {
                   this->inst=inst;
              }

};
variable_list var_list[37];

bool initilizeVariableList()
{
     string var[]={
                 "",
"IS_ATTACK_IDENTIFIES",
"ATTACK_FOUND",
"IP_SPOOFING_ATTACK",
"IDENTIFY_IP_ADDRESS",
"IS_SPOOFING_REFERS",
"RECHECK_HEADER_HTTP",
"IS_CALLER_ID_ATTACKS",
"CHECK_FRAUD_CALLS",
"IS_EMAIL_ADDRESS_REDIRECTING",
"CHECK_RETURN_ADDRESS",
"SNIFFING_ATTACK",
"IDENTIFY_SENDER_RECEIVER_HOST",
"MATCH_IDENTIFICATION",
"ENCRYPT_EMAILS",
"IDENTIFY_SENDER_RECEIVER_EMAILS",
"MALWARE_ATTACK",
"ON_ACCESS_SCAN",
"IS_ANTIVIRUS_RUNNING",
"TURN_ON_ANTIVIRUS",
"INSTALL_VIRUS_SCANNER",
"RUN_VIRUS_SCANNER",
"IS_ID_ON",
"TURN_ON_FIREWALLS",
"TROJAN_ATTACK",
"CHECK_SECURITY_SOFTWARE_ON_OR_OFF",
"IS_ATTACK_MALLICIOUS",
"CHECK_THE_MOVEMENT_OF_THE_DATA",
"IS_SYSTEM_PERFORMANCE_SLOW",
"RESET_THE_COMPUTER",
"IS_IT_DOS_ATTACK",
"IS_IT_PING_FLOOD",
"ON_ACCESS_SCAN",
"IS_SMURFING",
"IS_IT_PING_DEATH",
"IS_FRAGGLE",
"IS_IT_SYN_FLOOD"
                 };

     for(int i=1; i<38; i++)
     {
             var_list[i].setName(var[i]);
             var_list[i].setValue("");
             var_list[i].setInst("NI");
     }
}

void printVariable_List()
{
     cout<<endl;

     cout<<"Variable List"<<endl;
    for(int i=1; i<38; i++)
     {
             cout<<"("<<i<<")\t";
             cout<<var_list[i].getName();
             cout<<"\t\t\t"<<var_list[i].getValue();
             cout<<"\t\t\t"<<var_list[i].getInst()<<endl;

     }
}

int getVariableIndex(string var)
{
    for(int i=1; i<38; i++)
     {
             if(var_list[i].getName()==var)
             {
                          return i;
             }

     }
     return -999;
}




class conclusion_variable_queue
{

      string var[50];
      int head, tail;
      public:
             conclusion_variable_queue()
             {
                                        cout<<"   1if";
                    head=tail=-1;
                    for(int i=0; i<50; i++)
                    {
                            var[i]="";
                    }
                    cout<<"   1if";
             }
             bool push(string var)
             {
                  cout<<"   1if";
                  if(head==-1)
                  {
                                head=0;

                  }


                  else 
                  {
                      for(int i=0; i<=tail; i++)
                      {
                              if(this->var[i]==var)
                              {
                                       return false;
                              }
                      }
                  }               

                  ++tail;

                  //cout<<"\nInto push Tail: "<<tail<<"  var:"<<var<<endl;
                  this->var[tail]=var;
                  return true;
             }
             string pop()
             {
                    string str;
                    if(head==-1)
                    {
                               str="";   
                    }           
                    else{
                         str=var[head];
                         if(head==tail)
                         {
                               tail++;
                         }
                         head++;
                    }
                    return str;
             }
             string getHead()
             {
                    return var[head];
             }
             string getTail()
             {
                    return var[tail];
             }
             bool isEmpty()
             {
                  if(head==-1){
                          //cout<<endl<<"   1if"<<endl;
                      return true;
                  }       

                  if(var[head]=="" && head==tail)//queue is empty if head value is null
                  {
                      //cout<<endl<<var[head]<<"   if"<<endl;
                      return true;
                  }
                  else
                  {
                      //cout<<endl<<var[head]<<"   else"<<endl;
                      return false;
                  }
             }
             void print()
             {
                  cout<<"\nQueue content: "<<endl;
                  if(head<0 || var[head]=="")
                  {
                            cout<<"Error: The queue is empty";
                            return;
                  }
                  for(int i=head; i<=tail; i++)
                  {
                          cout<<endl<<"  "<<i<<" "<<var[i];
                  }
                  cout<<endl;
             }

};








//treatment part begins from here//
//////////////////////////////////////////////////
///////////////forward chaining////////////////////
///////////////////////////////////////////////////
void forwardchaining(string str)
{

          cout<<"\nType of cancer: "<<str<<endl;
          system("pause");
          conclusion_variable_queue q;
          int clause_number=-999;
          int var_index;
          int rule=-999;

          if(!initilizeVariableList())
          {
              cout<<"\nError: variable list could not be initilized"<<endl;
          }

          //printVariable_List();

          q.push(str);
          var_index=getVariableIndex(str);
          var_list[var_index].setValue("YES");
          var_list[var_index].setInst("I");
          //cout<<endl<<"Before while loop"<<endl;
          //q.print();
          //system("pause");

          string var1="";
          string value1="";
          string var2="";
          string value2="";
          int afterindex=0;

          while(!q.isEmpty())
          {
                             string variable=q.getHead();

                             //cout<<"\nVariable: "<<variable<<endl;
                             afterindex=0;
                             while(afterindex!=-999)
                             {
                                     //cout<<"\nVariable: "<<variable<<"   afterindex: "<<afterindex<<endl;               
                                     afterindex=clause_number=getClauseNumber(variable,afterindex);
                                     //cout<<"\nVariable: "<<variable<<"   afterindex: "<<afterindex<<endl;

                                     if(afterindex<1)
                                     {
                                                     //cout<<"\nNo more clauses at this level"<<endl;
                                                     //system("pause");
                                                     //afterindex=50000;
                                                   break;
                                     }
                                     rule=(int(clause_number/4)+1)*10;
                                     cout<<"\nClause number: "<<clause_number<<"  Rule number: "<<rule<<endl;
                                     //system("pause");

                                     switch(rule){
                                                 case 10:

                                                                 var1="IS_ATTACK_IDENTIFIES";
                                                                 value1="NO";

                                                                 if(var1==variable && var_list[var_index].getValue()==value1)
                                                                 {
                                                                                   var2="ATTACK_FOUND";
                                                                                   value2="NO";


                                                                 }

                                                                  break;
                                                     case 20:

                                                                 var1="IS_SPOOFING_ATTACK";
                                                                 value1="YES";

                                                                 if(var1==variable && var_list[var_index].getValue()==value1)
                                                                 {
                                                                                   var2="IDENTIFY_IP_ADDRESS";
                                                                                   value2="YES";

                                                                 }
                                                                 break;
                                                     case 30:

                                                                 var1="IS_SPOOFING_REFERS";
                                                                 value1="YES";

                                                                 if(var1==variable && var_list[var_index].getValue()==value1)
                                                                 {
                                                                                   var2="RECHECK_HEADER_HTTP";
                                                                                   value2="YES";
                                                                 }           
                                                                 break;
                                                     case 40:

                                                                 var1="IS_CALLER_ID_ATTACKS";
                                                                 value1="YES";

                                                                 if(var1==variable && var_list[var_index].getValue()==value1)
                                                                 {
                                                                                   var2="CHECK_FRAUD_CALLS";
                                                                                   value2="YES";
                                                                 }
                                                                 break;
                                                     case 50:
                                                                 var1="IS_EMAIL_ADDRESS_REDIRECTING";
                                                                value1="YES";

                                                                 if(var1==variable && var_list[var_index].getValue()==value1)
                                                                 {
                                                                                   var2="CHECK_RETURN_ADDRESS";
                                                                                   value2="YES";
                                                                 }
                                                                 break;
                                                     case 60:
                                                                 var1="SNIFFING_ATTACK";
                                                                 value1="YES";

                                                                 if(var1==variable && var_list[var_index].getValue()==value1)
                                                                 {
                                                                                   var2="IDENTIFY_SENDER_RECEIVER_HOST";
                                                                                   value2="YES";
                                                                 }
                                                                 break;
                                                     case 70:
                                                                 var1="MATCH_IDENTIFICATION";
                                                                 value1="YES";

                                                                 if(var1==variable && var_list[var_index].getValue()==value1)
                                                                 {
                                                                                   var2="IDENTIFY_SENDER_RECEIVER_HOST";
                                                                                   value2="YES";
                                                                 }
                                                                 break;
                                                     case 80:
                                                                 var1="ENCRYPT_EMAILS";
                                                                 value1="YES";

                                                                 if(var1==variable && var_list[var_index].getValue()==value1)
                                                                 {
                                                                                   var2="IDENTIFY_SENDER_RECEIVER_EMAILS";
                                                                                   value2="YES";
                                                                 }
                                                                 break;
                                                     case 90:
                                                                 var1="MALWARE_ATTACK";
                                                                 value1="YES";

                                                                 if(var1==variable && var_list[var_index].getValue()==value1)
                                                                 {
                                                                                   var2="ON_ACCESS_SCAN";
                                                                                   value2="YES";
                                                                 }
                                                                 break;
                                                     case 100:
                                                                 var1="IS_ANTIVIRUS_RUNNING";
                                                                 value1="YES";

                                                                 if(var1==variable && var_list[var_index].getValue()==value1)
                                                                 {
                                                                                   var2="TURN_ON_ANTIVIRUS";
                                                                                   value2="YES";
                                                                 }
                                                                 break;
                                                     case 110:
                                                                 var1="INSTALL_VIRUS_SCANNER";
                                                                 value1="YES";

                                                                 if(var1==variable && var_list[var_index].getValue()==value1)
                                                                 {
                                                                                   var2="RUN_VIRUSSCANNER";
                                                                                   value2="YES";
                                                                 }
                                                                 break;
                                                     case 120:
                                                                 var1="IS_ID_ON";
                                                                 value1="YES";

                                                                 if(var1==variable && var_list[var_index].getValue()==value1)
                                                                 {
                                                                                   var2="TURN_ON_FIREWALLS";
                                                                                   value2="YES";
                                                                 }
                                                                 break;
                                                     case 130:
                                                                 var1="TROJAN_ATTACK ";
                                                                 value1="YES";

                                                                 if(var1==variable && var_list[var_index].getValue()==value1)
                                                                 {
                                                                                   var2="CHECK_SECURITY_SOFTWARE_ON_OR_OFF";
                                                                                   value2="YES";
                                                                 }
                                                     break;
                                                     case 140:
                                                                 var1="IS_ATTACK_MALLICIOUS";
                                                                 value1="YES";

                                                                 if(var1==variable && var_list[var_index].getValue()==value1)
                                                                 {
                                                                                   var2="CHECK_THE_MOVEMENT_OF_DATA";
                                                                                   value2="YES";
                                                                 }
                                                     break;
                                                     case 150:
                                                                 var1="IS_SYSTEM_PERFORMANCE_SLOW";
                                                                 value1="YES";

                                                                 if(var1==variable && var_list[var_index].getValue()==value1)
                                                                 {
                                                                                   var2="RESET_THE_COMPUTER";
                                                                                   value2="YES";
                                                                 }
                                                     break;
                                                     case 160:
                                                                 var1="IS_IT_DOS_ATTACK";
                                                                 value1="YES";

                                                                 if(var1==variable && var_list[var_index].getValue()==value1)
                                                                 {
                                                                                   var2="FILTER_TARGET";
                                                                                   value2="YES";
                                                                 }
                                                     break;
                                                     case 170:
                                                                 var1="IS_IT_PING_FLOOD";
                                                                 value1="YES";

                                                                 if(var1==variable && var_list[var_index].getValue()==value1)
                                                                 {
                                                                                   var2="ON_ACCESS_SCAN";
                                                                                   value2="YES";
                                                                 }
                                                     break;
                                                      case 180:
                                                                 var1="IS_IT_PING_DEATH";
                                                                 value1="YES";

                                                                 if(var1==variable && var_list[var_index].getValue()==value1)
                                                                 {
                                                                                   var2="ON_ACCESS_SCAN";
                                                                                   value2="YES";
                                                                 }
                                                     break;
                                                     case 190:
                                                                 var1="IS_SMURFING";
                                                                 value1="YES";

                                                                 if(var1==variable && var_list[var_index].getValue()==value1)
                                                                 {
                                                                                   var2="ON_ACCESS_SCAN";
                                                                                   value2="YES";
                                                                 }
                                                     break;
                                                     case 200:
                                                                 var1="IS_FRAGGLE";
                                                                 value1="YES";

                                                                 if(var1==variable && var_list[var_index].getValue()==value1)
                                                                 {
                                                                                   var2="ON_ACCESS_SCAN";
                                                                                   value2="YES";
                                                                 }
                                                     break;
                                                     case 210:
                                                                 var1="IS_IT_SYN_FLOOD";
                                                                 value1="YES";

                                                                 if(var1==variable && var_list[var_index].getValue()==value1)
                                                                 {
                                                                                   var2="ON_ACCESS_SCAN";
                                                                                   value2="YES";
                                                                 }
                                                     break;
                                     }
                                     //////////////gettting some error here please check
                               //      cout<<"\n\nbefore push"<<endl;
                               //cout<<endl<<var2<<"---------\n";
                                     if(q.push(var2))
                                     {
                                             //cout<<"\n\after push"<<endl;
                                             //system("pause");
                                             //q.print();
                                             var_index=getVariableIndex(var2);
                                             //cout<<"\nVariable index of "<<var2<<"   index: "<<var_index;
                                             //system("pause");
                                             if(var_index<1)
                                             {
                                                            cout<<"ERROR: VARIABLE: "<<var2<<" NOT FOUND IN THE VARIABLE LIST";
                                                            system("pause");
                                             }
                                             var_list[var_index].setValue("YES");
                                             var_list[var_index].setInst("I");
                                  //           printVariable_List();
                                     }




                             }
                             q.pop();
                             //cout<<"\nNext Level        Poped: "<<q.pop()<<endl;
                             //system("pause");
                             /*if(!q.isEmpty())
                             {
                                                  cout<<"\n\n\nend of loop\n\n\n";
                             }
                             */
                             //system("pause");
                             //return;

          }

//          cout<<"\ndone"<<endl;
//          printVariable_List();

          cout<<"\n\nThe recommended treatment for "<<str<<" are(is): "<<endl;

          int k=1;
          for(int x=1; x<22; x++)
          {
                  if(var_list[x].getInst()=="I" && var_list[x].getName()!=str)
                  {
                                  cout<<k++<<". "<<var_list[x].getName()<<endl;
                  }
          }

          cout<<endl<<endl;

//          q.print();

          system("pause");


}





int main(int argc, char *argv[])
{

    string attack[]={

                 "MALWARE_ATTACK"

                 }; 

     for(int i=0; i<1; i++)
     {                                              
              forwardchaining(attack[i]);
              //system("pause");
     }
    //attack is a string. this string specifies type of attack.





    system("PAUSE");
    return EXIT_SUCCESS;
}

I assume you are using *nix os, so if you get a core dump then run gdb or another debugger that will tell you where the problem is assuming you compile your program for debug.

You have 2 questionable sections.

All those strings are defined at least twice. You should make a master list of the strings and use when you need one, use an index into the master list array.

By carefully designing the list, you may (not guaranteed) be able to make your switch much shorter by combining cases and using the index rather than the strings themselves.

Also, read this about formatting. It's a good try, but much to wide.

You need a header file for all these string return type and data type. Just include :

# include <string>

This article has been dead for over six months. Start a new discussion instead.