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... 😉


Anmelden zum Antworten