2021-02-28
slides.com/jod/pt_8b
Docent: Jo Devriendt
Assistent: Ann Philips
Coördinator: Joost Vennekens
voornaam.achternaam@kuleuven.be
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
#include <stdlib.h>
void main() {
float* x = (float*) malloc(sizeof(float));
*x = 3.14;
}
8
x
adres:
?
?
?
?
?
?
?
?
3.14
?
?
?
?
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void* malloc(size_t k);
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
#include <stdlib.h>
void main() {
float* x = (float*) malloc(sizeof(float));
*x = 3.14;
free(x);
}
void free(void* p);
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
#include <stdlib.h>
void main() {
char* s = (char*) malloc(10);
strcpy(s, "Wikipedia");
s = (char*) realloc(s,14);
strcat(s, ".org");
free(s);
}
void* realloc(void* p, size_t k);
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
#include <stdlib.h>
typedef struct {
char naam[20];
int leeftijd;
} Mens;
void main() {
Mens* m = (Mens*) malloc(sizeof(Mens));
// ...
free(m);
}
Op dezelfde manier:
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
#include <stdlib.h>
void main() {
char* s1 = (char*) malloc(10);
char* s2 = s1;
free(s1);
strcpy(s2, "Wikipedia");
}
Pointer die verwijst naar reeds vrijgegeven geheugen
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
#include <stdlib.h>
void main() {
char* s = (char*) malloc(10);
s = NULL;
// free(???);
}
Toegekend geheugen dat niet vrijgegeven is, maar waarvan het adres in geen enkele pointer meer gestockeerd is
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
#include <stdlib.h>
void main() {
char* s;
for(int i=0; i<99999999; ++i){
s = (char*) malloc(10);
}
free(s);
}
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Merk op: dit soort bugs komt niet voor bij stack-based geheugenallocatie