Toon posts:

[c] memory lek

Pagina: 1
Acties:
  • 33 views sinds 30-01-2008

Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char *addstr(char *inputstring);

int main(void) 
{
  char *str1, *str2;
  
  str1 = addstr("Hello");
  str2 = addstr("Goodbye");
  
  printf("str1 = %s, str2 = %s\n", str1, str2);
  
  int i;
  for (i=0;i<5000000;i++)
  {
      str1 = addstr("Hey! Hello Hey! Hello Hey! Hello Hey! Hello Hey! Hello Hey! Hello");
  }
  
  printf("str1 = %s\n", str1);
  free(str1);
  free(str2);
  return 0;
}


char *addstr(char *inputstring) 
{
  int counter;
  char *returnstring;
  
  returnstring = strdup(inputstring);
  
  if (!returnstring) 
  {
    fprintf(stderr, "Error allocating memory; aborting!\n");
    exit(255);
  }
  for (counter = 0; counter < strlen(returnstring); counter++) 
  {
    returnstring[counter] += 2;
  }

  return returnstring;
}

in deze code zit in de for lus een memory lek,
hoe kan je nou het beste omschrijven hoe dit lek ontstaat?

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Moeten wij nou voor jou je huiswerk maken?

In de addstr functie wordt geheugen gealloceerd, zo'n 5 miljoen keer.
En dit wordt 1x vrijgegeven. Tel uit je winst.
edit:

ik bedoel natuurlijk dat alleen de laatste keer het geheugen wordt vrijgegeven

[ Voor 25% gewijzigd door bigbeng op 24-02-2004 14:35 ]


  • The End
  • Registratie: Maart 2000
  • Laatst online: 20:49

The End

!Beginning

Bij elke call naar 'addstr' wordt er geheugen gealloceerd d.m.v. 'strdup'. Elke allocatie moet d.m.v. een call naar 'free' gedealloceerd worden. Dat gebeurd hier niet.
Str1 wordt in totaal 5000001 keer gealloceerd en maar 1 keer gedealloceerd...

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
The End schreef op 24 februari 2004 @ 14:36:
Bij elke call naar 'addstr' wordt er geheugen gealloceerd d.m.v. 'strdup'. Elke allocatie moet d.m.v. een call naar 'free' gedealloceerd worden. Dat gebeurd hier niet.
Str1 wordt in totaal 5000001 keer gealloceerd en maar 1 keer gedealloceerd...
Tjeemig, nu hoeft ie het niet eens meer zelf te formuleren. :D

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Mjah, dit soort huiswerkvragen kan je best wel zelf maken. Hulp bij huiswerk is wel toegestaan, maar niet op deze manier.
Als je zelf eens de moeite neemt om de code te bekijken, en na te gaan hoe het lek ontstaat, kan je het zelf ook wel formuleren.

https://fgheysels.github.io/


Dit topic is gesloten.