Speicherproblem
-
Ich habe jetzt nach weiteren Stunden experimentieren und suchen rausgefunden das es am String liegt der übergeben wird.
char *errorString = new char; sprintf(errorString, "Das D3DDevice konnte nicht erstellt werden (%s): %s", DXGetErrorString(hResult), DXGetErrorDescription(hResult)); eWriteLog("Das D3DDevice konnte nicht erstellt werden", LT_ERROR); return E_FAILED;
Es liegt hier an DXGetErrorString(hResult) und/oder DXGetErrorDescription(hResult). Ich forsche noch ein wenig und evtl. könnt ihr mir ja auch helfen das Problem zu lösen.
@Vicious Falcon: Das ist aus keinem Buch :D, ich arbeite nur irgendwie gerne mit malloc :D.
-
Progglord schrieb:
char *errorString = new char;
Alter, wenn du schon C programmieren willst, dann lern es gefälligst richtig damit du dir nicht tausende von Buffer Overflows in deinen Code haust...
mfg, René~
-
Ich seh schon die beiden DXGetError Funktionen geben WCHAR* zurück.
Wie kann ich das denn richtig in char* umwandeln ?@NewSoftzzz: Wenn du schon rummeckerst, dann sag mir wenigstens wie es richtig geht.
EDIT:
Noch eine Frage:
Wie kann ich denn einen Buffer Overflow vorbeugen, bzw. wann wird dieser ausgelöst?
-
C++ bietet eine Klasse fuer Zeichenketten an, std::string. Auch solltest du dich mehr mit den Grundlagen vertraut machen und vorher ein reines C++ Buch lesen, bevor du Spiele damit machen kannst.
-
std::string kenn ich auch, es ist bloß ein wenig her :D. Danke ich werde es mal so machen.
-
wieso du nur so ne doofe antwort bekommen hast, liegt daran, dass keiner weiß, ob du nun C oder C++ programmierst...
der C weg wäre malloc, C++ std::string oder zumindest new char[SIZE].bb
-
Oder man legt einfach ein Array an.
-
feigling schrieb:
Oder man legt einfach ein Array an.
Rohe Arrays sind mühsam und fehleranfällig. Die würde ich wirklich nur verwenden, wenn es gar keine sinnvollen Alternativen wie
std::tr1::array
gibt und man keinesfalls die Möglichkeit hat, eine Viertelstunde zur Implementierung einer solchen aufzuwenden.
-
Ich hatte vergessen "unter C" dazuzuschreiben
-
Progglord schrieb:
Ich seh schon die beiden DXGetError Funktionen geben WCHAR* zurück.
Wie kann ich das denn richtig in char* umwandeln ?Da du unter Windows arbeitest, schau dir mal die Funktion WideCharToMultiByte (das Pendant ist, wer hätte es gedacht, MultiByteToWideChar) an.
const WCHAR* wstr = L"wstring"; size_t len = wcslen(wstr); std::vector<char> v(len+1,0); WideCharToMultiByte(CP_ACP,0,wstr,len,&v[0],len,0,0); // mit &v[0] arbeiten
-
feigling schrieb:
Ich hatte vergessen "unter C" dazuzuschreiben
Ich denke, als C-Programmierer würde ich mir mit der Zeit sicher auch irgendwas überlegen...