Systemabsturz bei Benutzung von lstrcpy mit delete[]



  • Hallo,

    ich habe da ein sehr grosses Problem. Bei der folgenden Kombination, stürzt mir der komplette Rechner ab. Ich habe das Gefühl er fährt sich im Speicher fest.

    ///////////////////////// Source - Code ////////////////////////////////////////
    CFile datei(m_strDate, CFile::modeRead);
    DWORD size_buff = datei.GetLength();
    TCHAR pStr[100];
    TCHAR* temp_pStr = new TCHAR[size_buff];
    datei.Read(temp_pStr, size_buff); datei.Close();
    lstrcpy(pStr, temp_pStr); // hier erfolgt der Absturz !!!
    delete[] temp_pStr;

    //lstrcpy(pStr, temp_pStr); setze ich lpstrcpy hier ein stürzt es nicht ab macht aber wenig Sinn
    SetDlgItemText(IDC_EDIT2, m_strLogDat);

    Kann mir da jemand helfen bzw. erklären warum das geschieht ?

    Im voraus vielen Dank

    Micha



  • Bist Du sicher, dass pStr[100] ausreicht? Sobald die Datei größer ist, schreibt lstrcpy(...) über pStr hinaus -> oh, oh, oh! Ich glaube Read(...) hängt kein Nullzeichen an, lstrcpy(...) kopiert und kopiert und kopiert ....



  • Alles klar danke,

    hast Recht ich glaube auch das das an Read liegt und das Arry ist zu klein geraten hab das Problem anders behoben trotzdem danke.

    MfG



  • Ups Sorry so hab ich es gelöst:

    CFile datei(m_strDate, CFile::modeRead);
    DWORD size_buff = datei.GetLength();
    TCHAR* pStr = new TCHAR[size_buff];
    datei.Read(pStr, size_buff);
    SetDlgItemText(IDC_EDIT2, pStr);
    Sleep(2);
    delete[] pStr;
    datei.Close();

    funzt ganz gut ohne lpstrcpy ist e überflüssig hab ich bemerkt.

    MfG



  • zu info

    TCHAR pStr[100];
    TCHAR* temp_pStr = new TCHAR[size_buff];
    datei.Read(temp_pStr, size_buff); datei.Close();

    lstrcpy(&pStr /*hier ist der fehler*/, temp_pStr); // hier erfolgt der Absturz !!!

    delete[] temp_pStr;

    volker



  • @vdittrich

    lstrcpy(&pStr /*hier ist der fehler*/, temp_pStr);

    Was soll das bitteschön sein?

    Zur Info:
    Die Adresse eines Zeigers pStr ist ein Doppelzeiger, womit dieser Code schon bei der Kompilierung abbrechen dürfte!

    [ Dieser Beitrag wurde am 09.04.2003 um 12:19 Uhr von RenéG editiert. ]



  • sorry ich sollte wohl heute aufhören

    TCHAR pStr[100];
    TCHAR* temp_pStr = new TCHAR[size_buff];
    datei.Read(temp_pStr, size_buff); datei.Close();

    pStr==&pStr[0] oder bin ich schon wieder falsch

    lstrcpy(&pStr[0] /*hier ist der fehler*/, temp_pStr); //



  • Ja, solltest Du ... 😉



  • sorry wenn ich geistig abwesend bin aber wie dann richtig

    char pStr[100];

    pStr ist ein pointer

    pStr[0] ist das erste element im array

    und &pStr[0] kein pointer auf erstes element im array ?

    gib mir mal bitte nachhilfe



  • Doch klar, aber ob Du pStr oder &pStr[0] schreibst ist wurscht.



  • danke.


Anmelden zum Antworten