Access Violation und Probleme mit _Strftime()
-
Hi,
ich hab mir eine Funktion geschrieben, um die aktuelle Zeit in der Form (HH:MM:SS) als String auszugeben.
Dazu der Code.#include <iostream> #include <string> #include <ctime> using namespace std; string getTime() { char* ftime="(00:00:00)"; struct tm *ptr; time_t tm; tm=time(0); ptr=localtime(&tm); strftime(ftime,10,"(%H:%M:%S)",ptr); delete ptr; return ftime; } int main() { cout << getTime(); return 0; }
Soweit so gut, wenn ich das mit VC++ 6.0 kompiliere und ausführe, geht alles perfekt, bloß beim debuggen bekomme ich die Meldung: Unbehandelte Ausnahme in c.exe: 0xC0000005: Access Violation.
Der Debugger springt daraufhin in eine Funktion namens _Strftime() und markiert den Fehler in einer Zeile, die wiefolgt lautet:*string++ = *format++;
Wie kann ich das Problem lösen?
-
char* ftime="(00:00:00)";
Das du hiermit keinen Speicher allokiert hast, sondern nur einen Zeiger auf ein
konstantes Literal definiert hast ist dir hoffentlich klar.
Ich habs zwar nicht nachgelesen, ich vermute aber mal das strftime() in diesen
Bereich was rein kopieren will. Das geht dann natürlich schief.
-
du meinst also, dass ich das lieber so schreiben sollte:
char ftime[11]="(00:00:00)";
oder was meinst du?
-
mein ich
-
Sure?
Is das net funktions-lokal? Wie wärs mitchar* ftime=new char[11];
-
ness schrieb:
Sure?
Is das net funktions-lokal? Wie wärs mitchar* ftime=new char[11];
oder man macht ein 'static' davor. dann überlebt der speicher auch das verlassen der funktion
-
ness schrieb:
Sure?
Is das net funktions-lokal?Ja und? Er gibt doch string zurück, also wird ftime sowieso bedeutungslos.
nochwas:
SithLord schrieb:
delete ptr;
Wozu das? Lass es weg, denn es ist falsch.
-
Ja, hab ich übersehen, war unsinn.