Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » free() funktioniert nicht.

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
10.07.2006, 12:44 Uhr
~Gunnibeard
Gast


Ich möchte in meinem winapi programm über malloc reservierten speicher anhand von free wieder freigeben....nur dann fliegt mir das programm um die ohne und sagt mir, es hätte einen fehler auf dem heap oder in einer dll.

hier mal der codeschnipsel:

C++:
            TCHAR* buffer = NULL;
            int iLength = 0;

            iLength = GetWindowTextLength(hNam);

            if (iLength > 0)
            {
                std::ofstream Output("Output.txt",
                                std::ios::binary | std::ios::out);

                buffer = (TCHAR*) malloc(iLength);

                GetWindowText(hNam, buffer, 50);

                Output<<buffer;
                //MessageBox(hWndNeu, buffer, TEXT("oi"), 0);
                if (buffer != NULL)
                    free(buffer); buffer = NULL;

                Output.close();
            }



Was ist daran so falsch?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.07.2006, 15:48 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Ich würde einfach mal darauf tippen das in deinem Control hNam weniger als 50 Zeichen drin stehen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.07.2006, 18:36 Uhr
~Gunnibeard
Gast



Zitat von Guybrush Threepwood:
Ich würde einfach mal darauf tippen das in deinem Control hNam weniger als 50 Zeichen drin stehen


richtig, aber in hole mir ja speicher für vorhanden anzahl zeichen mit GetWindowTextLength(). ?!?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.07.2006, 18:51 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ja, aber liest dann 50 ein -> kabumm ...
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
10.07.2006, 19:42 Uhr
~Gunnibeard
Gast


hm....so richtig tuts aber nicht wollen

C++:
            TCHAR* buffer = NULL;
            int iLength = 0;

            iLength = GetWindowTextLength(hNam);

            if (iLength > 0)
            {
                std::ofstream Output("Output.txt",
                                std::ios::binary | std::ios::out);

                buffer = (TCHAR*) malloc(iLength);

                GetWindowText(hNam, buffer, iLength);

                Output<<buffer;

                Output.close();

                if (buffer != NULL)
                    free(buffer) ; buffer = NULL;
            }



Zitat:

HEAP[Adressbuch.exe]: Heap block at 00885C60 modified at 00885C94 past requested size of 2c
Windows hat einen Haltepunkt in Adressbuch.exe ausgelöst.

Dies kann auf eine Beschädigung des Heaps zurückzuführen sein und weist auf ein Problem in Adressbuch.exe oder in einer der geladenen DLLs hin.

Weitere Analyseinformationen finden Sie möglicherweise im Ausgabefenster.

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.07.2006, 22:16 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


sizeof(TCHAR) muss nicht 1 sein. d.h malloc(iLength * sizeof(TCHAR))
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: