8c. Dynamische arrays
2021-02-28
slides.com/jod/pt_8c
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
Waar is dynamisch geheugenbeheer goed voor?
- Wat is de maximumlengte van arrays of strings?
- Hoeveel getallen ga je maximum inlezen uit een bestand?
- Hoe groot wordt je databank?
Wanneer je niet op voorhand weet hoeveel geheugen je nodig hebt
Typisch bepaalt de input voor je programma hoeveel geheugen je nodig hebt.
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Dynamische array
#include <stdlib.h>
#include <stdio.h>
#define N 10
int main(int argc, char* argv[]) {
int aantal = atoi(argv[1]);
if(aantal<2){
return 1;
}
long long x[N];
x[0]=0;
x[1]=1;
printf("0\n1\n");
for(int i=2; i<aantal; ++i){
x[i]=x[i-1]+x[i-2];
printf("%lld\n",x[i]);
}
}
Berekent getallen van Fibonacci door ze te stockeren in array
Hard-coded max lengte
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Dynamische array
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char* argv[]) {
int aantal = atoi(argv[1]);
if(aantal<2){
return 1;
}
long long* x = (long long*)
malloc(sizeof(long long)*aantal);
x[0]=0;
x[1]=1;
printf("0\n1\n");
for(int i=2; i<aantal; ++i){
x[i]=x[i-1]+x[i-2];
printf("%lld\n",x[i]);
}
free(x);
}
Dynamische lengte, afhankelijk van input
Berekent getallen van Fibonacci door ze te stockeren in array
Voor de rest identiek aan statische arrays
... behalve free() niet vergeten ;)
Pointer, want array is geen lvalue
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Tweedimensionele array
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char* argv[]) {
int n = atoi(argv[1]);
int** x = (int**) malloc(sizeof(int*)*n);
for(int i=0; i<n; ++i){
x[i] = (int*) malloc(sizeof(int)*n);
for(int j=0; j<n; ++j){
x[i][j] = i-j;
printf("%3d ",x[i][j]);
}
printf("\n");
}
for(int i=0; i<n; ++i){
free(x[i]);
}
free(x);
}
Dus: pointer naar pointers
Tweedimensionele array: array van arrays
Binnenste array moet ook gealloceerd worden
...
...
en terug gedealloceerd
Opgepast:
sizeof(int*) != sizeof(int)
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Samenvatting
- Dynamisch geheugenbeheer laat toe om stukken geheugen van veranderlijke grootte aan te spreken
- Dynamische arrays worden voorgesteld door pointers
- Meer-dimensionele arrays zijn dan pointers naar pointers
- elke dimensie moet individueel gealloceerd worden
8c. Dynamische arrays
By Jo Devriendt
8c. Dynamische arrays
- 484