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 45

    pcIn = 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 😉


Anmelden zum Antworten