Debug Assertion Failed / delete problem
-
Hallo liebe Community,
ich habe jetzt des öfteren ein Problem beim umgang mit delete und vermute das ich da irgend ein verständniss Problem habe. Vielleicht kann mir da jemand auf die Sprünge helfen:
Und zwar erzeuge ich innerhalb von Funktionen neue Objekte von der Klasse C_Command und möchte danach den Speicher an einer anderen Stelle wieder freigeben. Jedoch enhält as Objekt auch einen zeiger auf eine BYTE array welches ich auch dynamisch allociert habe. Wenn ich das dann freigebe (Zeile 20) und danach das Objekt selbst lösche bekomme ich eine "Debug Assertion Failed" (siehe screenshot).
http://img339.imageshack.us/img339/56/debug.th.jpg
wo liegt hier das Problem?
bool C_Server::ReciveString(SOCKET socket, char* buf, int buflen) { Packet *packet = C_Winsock::receivPacket(socket); if(packet == 0) return false; C_Command* cmd = C_Codec::decodeCmd(packet->data); if(cmd->commandID == STRING) { string temp = C_Codec::decodeString(cmd); memcpy(buf, temp.c_str(), buflen); buf[buflen-1] = '\0'; } else buf[0] = '\0'; delete packet->data; delete packet; delete cmd->pData; // führt zu fehler delete cmd; return true; }wenn ich delete [] cmd->pData schreibe, passiert genau das gleiche.
Auszug aus der decodeCmd Funktion
C_Command* C_Codec::decodeCmd(BYTE *bytes) { unsigned int datalen; memcpy((void*)&datalen, (void*)&bytes[1], sizeof(unsigned int)); char * pData = new char[datalen]; memcpy(pData, &bytes[5], datalen); C_Command* cmd = new C_Command(bytes[0], datalen, (BYTE*)pData); return cmd; }Ich bin für alle Hinweise dankbar!
Grüße Crispy!
-
delete packet->data; delete packet; delete cmd->pData; // führt zu fehler delete cmd;das hier sieht falsch aus...
wofür steht das ständige C_ vor den ganzen Typen? Für Class oder für C?
Falls das da C++ sein sollte: Nein, ists nicht... gibt ziemlich viele Dinge, die da potthässlich sind...ansonsten zeig mal:
Packet (Deklaration + CTor / DTor)
C_Command (Deklaration + CTor / DTor)bb
PS:
ReciveString
receivPacketgz!

PPS:
Auszug aus der decodeCmd Funktion
Dir ist klar, dass das ganze weder Plattformunabhängig noch hübsch ist? (und vermutlich auch nicht all zu performant)