2017-11-09 7 views
-3

Ich versuche eine Queue (Datenstruktur) zu implementieren. Ich habe ein Problem, wenn ich ein d'tor mache ein löschen, nur wenn ich lösche die Funktion "delete * char", es ist Arbeit und es sieht sehr seltsam für mich. dies mein Code: Node.hLaufzeitfehler in Destruktor löschen. C++

class Node 
    { 
     public: 
      Node(); 
      Node(char*,int); 

      ~Node(); 
      Node(const Node& t);//copy c`tor 
      Node& operator= (const Node&); 
    ..... 

     private: 
      char * name; 
      int money; 
    ..... 
    }; 

Node.cpp:

Node::Node() //c`tor 
{} 
Node::~Node() //d`tor 
{ 
    //delete [] name; 

} 
Node::Node(char * n,int m){ //c`tor 
    name = new char[strlen(n)+1]; 
    strcpy(name,n); 
    money = m; 
} 
Node::Node(const Node& t){ //copy c`tor 
    name = new char[strlen(t.name)+1]; 
    strcpy(name,t.name); 
    money = t.money; 
} 
Node& Node::operator= (const Node& t){ 
    if(this != &t){ 
    name = new char[strlen(t.name)+1];//EDITED 
    strcpy(name,t.name); 
} 
return *this; 

}

der main.cpp

int main() 
{ 

    Node k1("Naor",100),k2("Klock",200); 
    return 0; 
} 

EDIT 1: i fix die allocate at operator =, und der Fehler keine Verbindung zur Queue-Klasse, so lösche ich th ey auch, immer noch Laufzeitfehler.

+2

Bitte geben Sie eine [mcve] und vergessen Sie nicht, eine Frage zu stellen – user463035818

+2

Warum verwenden Sie nicht 'std :: string'? – user463035818

+2

Verwenden Sie std :: string! –

Antwort

1

Es sieht so aus, als hätten Sie das operator=() nicht implementiert, was bedeutet, dass es vom Compiler generiert wurde. Also, in diesem Fall wird die Node wird einfach kopiert, und Sie werden eine doppelt frei auf delete[] name Anruf haben.

UPDATE

Zusätzlich oberhalb dieser Code als ein nicht definiertes Verhalten zu dem, weil Sie strcpy() Speicher nicht zugeordnet, da der Standard-Konstruktor nicht vergeben ist.

Node& Node::operator= (const Node& t){ 
    if(this != &t){ 
    strcpy(name,t.name); 
} 
+0

Ich implementiere, tut mir leid, ich lösche es aus dem Beispiel für kurze Lesung.Bearbeiten Sie jetzt –

+1

@NaorMalca siehe das Update. – Alex

+1

@NaorMalca Du solltest auch die Queue-Klasse besser veröffentlichen, zumindest die addNode-Methode. –