2017-04-18 3 views
0

Le code suivant fonctionne correctement pour 3 4 ou 6 fois et arrive avec "le programme a cessé de fonctionner" J'ai vérifié tout mais je n'ai pas eu la moindre idée Im using code -blocsLe programme C++ a cessé de fonctionner LISTE DES LIAISONS

struct info{ 
string name; 
string phone; 
}; 

struct node{ 
info contact; 
node *link; 
}; 

void SaveToFile(node *start); 
void AddNode(node *&start, info contact); 
void display(node *start); 

int main() 
{ 

bool check = true; 
int choice; 
info Newcontact; 
node *start = NULL; 

    while(check){ 
     cout<<" ----------------------------- \n"; 
     cout<<"|  PHONE DIRECTORY  |\n"; 
     cout<<" ----------------------------- \n"; 
     cout<<"|1: Insert a Contact   |\n"; 
     cout<<"|4: DISPlAY Contacts   |\n"; 
     cout<<"|6: EXIT      |\n"; 
     cout<<" ----------------------------- \n"; 

     cout<<"Enter your choice: "; 
     cin>>choice; 

     switch(choice){ 
     case 1: 
      cout<<"Enter Name: "; 
      cin>>Newcontact.name; 
      cout<<"Enter Contact No: "; 
      cin>>Newcontact.phone; 
      AddNode(start,Newcontact); 
      break; 

     case 4: 
      display(start); 
      break; 

     case 6: 
      check = false; 
      break; 
     } 
    } 

    return 0; 
} 

Ce sont mes fonctions d'ajout de nouveaux éléments et d'affichage lien liste

void AddNode(node *&start, info User_contact){ 
node *temp, *p; 
p=start; 
temp = (node *)malloc(sizeof(node)); 
temp->contact = User_contact; 

if(start==NULL){ 
    start = temp; 
    temp ->link=NULL; 
} 
else{ 
    while(p->link!=NULL){ 
     p=p->link; 
    } 

     p->link=temp; 
     temp->link=NULL; 
} 
} 

void display(node *start){ 
node *p = start; 
while(p!=NULL){ 
    cout<<"NAME: "<<p->contact.name<<" "<<"PNONE: "<<p->contact.phone<<"\n"; 
    p=p->link; 
} 
} 

Répondre

1

Eh bien, réponse courte: si vous écrivez du code C++, ne pas utiliser malloc, calloc et autres * alloc. Vous avez de bons new et delete. Avec * alloc vous n'obtenez pas suffisamment de mémoire pour std::string, car std::string est aussi une classe et vous devez également allouer de la mémoire pour chaque chaîne.