Memory Leack (auch mit free(x) nicht zu beheben)
-
morgen
leutz, ich glaube, ich hab ziemlichen mist gemacht *gg*
also:
folgendes lege ich an:
pcIn = static_cast<char*>(_alloca(iLen));
funzt auch wunderbar
wenn ich nun so aus der funktion rausgehe, habe ich ein memory leack, was ich natürlich nicht haben will
somit habe ich kurz vor meinem return folgendes gemacht
if (pcIn != NULL) free(pcIn);
so, wenn er den nun freigeben will, knallt er in einer mfc DLL
gibt es noch ne andere möglichkeit um speicher wieder freizugeben?
-
The alloca() function allocates space in the stack frame of the caller, and returns a pointer to the allocated block. This temporary space is automatically freed when the function from which alloca() is called returns.
-
ja lustig
ich krieg aber trotzdem memory leack
mom, ich schau mal, was er mir da genau ausgibt
Run-Time Check Failure #4 - Stack area around _alloca memory reserved by this function is corrupted Address: 0x0012E500 Size: 17 Allocation number within this function: 3 Data: <4C2B64A357DEA3FE> 34 43 32 42 36 34 41 33 35 37 44 45 41 33 46 45
-
Hi,
Run-Time Check Failure #4 - Stack area around _alloca memory reserved by this function is corrupted
Address: 0x0012E500
Size: 17
Allocation number within this function: 3
Data: <4C2B64A357DEA3FE> 34 43 32 42 36 34 41 33 35 37 44 45 41 33 46 45pcIn = static_cast<char*>(_alloca(iLen));
Ich würde sagen, du schreibst über iLen hinaus in das allokierte Array.
Machst Du vielleicht ein pcIn[iLen] = 'A' oder ein strcpy, oder etwas ähnliches ?
Dabei wird noch ein /0 an dein Array hinzugefügt.
Du must dann
pcIn = static_cast<char*>(_alloca(iLen + 1));
verwenden.
Besser danach auch noch ein
memset(pcIn, 0, iLen+1)
damit du ein sauber Nullterminiertes String-Array hast.
Gruss
Frank
-
Du hast primär ein Speicherüberschreiber... bevor Du den nicht behoben hast, brauchst Du gar nicht nach Leaks suchen...
-
hey
ich hab da iLen + 1 gemacht und schon läuft es ohne leacks *zwinka*
dankeschön