Avatar billede nomak Nybegynder
21. juli 2003 - 15:48 Der er 7 kommentarer og
1 løsning

forskel på memset() of free()

Hvad er forskellen på memset og free funktionerne?

free(): warning: page is already free

denne besked får jeg når jeg bruger:

char *output;
output = (char *) malloc(300);

free(output);

memset giver ingen fejl..

hvad skal jeg bruge, og hvorfor?
Avatar billede arne_v Ekspert
21. juli 2003 - 15:57 #1
memset giver et antal bytes en bestemt værdi.

free frigiver noget dynamisk allokeret memeory.

Det er to helt forskellige funktioner.
Avatar billede arne_v Ekspert
21. juli 2003 - 15:57 #2
Det angivne kode fragment ser helt korrekt ud.
Avatar billede nomak Nybegynder
21. juli 2003 - 16:00 #3
hvad betyder min fejl-besked så?
Avatar billede arne_v Ekspert
21. juli 2003 - 16:04 #4
Fejl-beskeden læser jeg som at "den" mener at du har freet den samme
pointer 2 gange.
Avatar billede nomak Nybegynder
21. juli 2003 - 16:08 #5
hmm kan det være fordi jeg bruger det stykke kode flere gange?

char *outut;

int main()
{
output = (char *) malloc(300);

free(output);


output = (char *) malloc(300);

free(output);
return 0;
}

kan man så kun free'e den 1 gang selvom man allokere plads til den igen?
Avatar billede arne_v Ekspert
21. juli 2003 - 16:13 #6
Det stykke kode er også helt OK (bortset fra at der mangler et p men
det har ikke noget med dette at gøre).

int main()
{
  output = (char *) malloc(300);
  free(output);
  free(output);
  return 0;
}

ville derimod være suspekt.
Avatar billede nomak Nybegynder
21. juli 2003 - 16:17 #7
jeg forstår hvad du mener, men kan ikke se det i min kode at jeg har det 2 gange? har søgt efter alle free der er i dokumentet, og den bliver kun freet 1 gang efter brug
Avatar billede segmose Nybegynder
21. juli 2003 - 16:45 #8
Sæt alle pointer du free'er til NULL så får du måske fundet fejlen.

free(output);
output = NULL; // output er nu ugyldig, sæt den til NULL.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester