memset - hvorfor det?

Tags:    c++

Hej,

Ved nogle strukturer og vinduer (toolbars, fx) er det nødvendigt at nulstille objektet med memset. På MSDN står der, at funktionen fylder objektet op med en bestemt karakter, til et bestemt punkt. Altså:

memset (objekt, 0, sizeof (objekt))

fylder hele "objekt" med "0".

Men hvorfor skal man gøre dette?

Hilsen Thomas



3 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
Hej

Hvis man ikke nulstiller objektet, kan der gemme sig noget data i den og hvis det er det kommer der måske en bug i dit program. Det er ikke sikkert der er noget data hver gang, så det er en god ide at nulstille den da der ellers kan komme en bug engang. Nulstiller du den er du på den sikre side. Jeg tror nok det er sådan det hænger sammen.




Når du opretter en pointer uden at initialisere den, så har du ikke styr på hvor den peger henne. En nyoprettet og uinitialiseret pointer peger et vilkårligt sted i hukommelsen.

Når du initialisere (fx med memset) så ved du at din pointer peger på NULL eller initialiseret hukommelse og du kan derfor verificere om pointeren er valid. Dette er også grunden til at du altid skal sætte din pointer til NULL efter den er blevet nedlagt.

Ved oprettelse af en pointer:

// check om pointeren i forvejen er i brug
// for at undgå leaks m.m.
if (pointer != NULL ) {
delete ptr;
ptr = NULL
}

ptr = new ...();


Ved sletning af en pointer:

if (NULL != ptr) {
delete ptr;
ptr = NULL;
}

Bemærk hvordan der i ovenstående to eksempler eksplicit bliver checket på om pointeren er NULL. Tilsvarende verifikation kan bruges på de steder hvor pointeren peger, når hukommelsen er initialiseret.

Generelt er det ALTID en god ide at initialisere variable (herunder pointer, allokeret hukommelse m.m.) inden disse bruges.

Hth




Okay, tak for svar begge to.



t