Wo ist der Fehler?



  • Hallo, beim Rücksprung aus der Function kommt folgender Fehler:

    Unbehandelte Ausnahme....:Benutzerhaltepunkt.

    void DoSomeThing(int iTeiler, HWND hFenster)
    {
        int iLength = GetWindowTextLength(hFenster);
    
        char *lpFensterText = new char[iLength];
    
        GetWindowText(hFenster,lpFensterText,iLength);
    
        char czText[] = "DLL is active...\r\nReceived iTeiler = ";
        char buffer[2];
        _itoa(iTeiler,buffer,10);
        strcat(czText,buffer);
        strcat(lpFensterText,czText);
        SetWindowText(hFenster,lpFensterText);
        //delete buffer;
        delete []lpFensterText;
    }
    


  • strcat(czText,buffer); ist falsch



  • An dem kann es eigentlich nicht liegen, weil bei dem minimal-code hier geht es auch nicht.

    int iLength = GetWindowTextLength(hFenster);
    
        char *lpFensterText = new char[iLength];
    
        GetWindowText(hFenster,lpFensterText,iLength);
    
        char czText[] = "DLL is active...\nReceived iTeiler = ";
        char buffer[2];
        strcat(lpFensterText,"Hallo");
        SetWindowText(hFenster,lpFensterText);
        delete []lpFensterText;
    

    Kann es sein dass ich lpFensterText gar nicht löschen kann, weil sonst ja der Zeiger ins leere zeigt? Aber wann muss ich dann löschen?



  • lpFensterText ist doch viel zu klein. da paßt der fenstertext rein, aber nicht noch ein "Hallo"



  • wenn ich das delete weglasse läuft aber das programm und der text mit "hallo" erscheint auch wie er soll....



  • Ja, du überschreibst mit dme "Hallo" brutal das, was hinter lpFensterText liegt im Speicher. Das kann z.B. ein Teil der Heap-Datenstruktureen sein, die für delete benötigt werden. Ergo läuft das Programm für den Moment dann richtig, wenn das delete fehlt. Das wichtige ist halt, wenn du für genug platz in lpFensterText sorgst, sprich mehr chars reservierst.



  • aber ich dachte das strcat() den array automatisch erweitert und so für genügend speicher sorgt...



  • Wie kommst du denn darauf?



  • wie kann ich dann den array vergrößern, wenn ich am anfang noch nicht weis wieviel noch dazukommt....

    Ich will ja den Wert eines Textfeldes auslesen, und ich weis nicht wieviel da drinsteht.....

    [ Dieser Beitrag wurde am 11.06.2003 um 13:24 Uhr von AnTri editiert. ]


Anmelden zum Antworten