delete[] Problem?
-
Hi
Ich krig bei folgendem Code (etwas gekürzt) diesen Fehler:
Debug Error!
DAMAGE: after normal block (#255) at 0x0030...int CEasyTCDlg::AnzahlRecords() { int OutLenght=16, MaxRecords=1, Rec=1, Wait=0; char DataOut[17]; char *cmd = new char[40]; CardRecordStruct *OutRecord=new CardRecordStruct; sprintf(cmd,"Card,MemRead,32,16"); while(dResult!=0) { dResult=(g_pSCardCommand)(&hSrvInst, cmd, 0, 0, 0, DataOut, &OutLenght); } sprintf(&DataOut[OutLenght],"\0"); ... sprintf(cmd,"Card,Unlock"); dResult=(g_pSCardCommand)(&hSrvInst, cmd, 0, 0, 0, DataOut, &OutLenght); delete OutRecord; OutRecord=0; delete[] cmd; cmd=0; return Rec; }
Er tritt beim Debuggen genau dann auf wenn ich delete OutRecord; ausführe. Wenn ich das cmd zuerst freigeben will gibts da den Fehler.
Kann mir jemand helfen
Ich bin mitlerweile völlig ratlos. Bin ich blind?
MfG
-
Machst du zwischendurch (bei ...) noch was mit cmd? Zum Beispiel ein sprintf, das mehr als 39 Zeichen ausgibt?
-
Ich mach schon noch was (sprintf), aber nie mehr als 39 Zeichen. Ausserdem hab ich auch schon 1000 Zeichen reserviert -> derselbe Fehler.
Ich hab jetzt ne Lösung gefunden wie ich den Fehler mit dem cmd beheben kann. Ich mache ein statisches Array und übergebe cmd die Adresse des erste Elements.
Das funzt soweit, aber denselben Fehler krig ich bei "delete OutRecord;" auch. Die Adresse 0x0030... entspricht dabei genau der Adresse des OutRecords.
*ratlos*
-
Vermutlich werden in DataOut mehr als 17 Bytes geschrieben.
Dadurch werden die Pointer cmd und OutRecord zerstört.
Mach testweise DataOut größer und schau dir vor dem Delete die Bytes an.[ Dieser Beitrag wurde am 10.07.2003 um 11:30 Uhr von Geo editiert. ]
-
Ich IDIOT!!!!!!!!!!!!!!!!!!!!!!!!!!!
Ich hab tatsächlich 32 Byte in eine Struktur von 16 Byte Grösse schreiben wollen.
*ganzfestschäm*
Ich bitte um Vergebung
MfG