TOPIC O: Pointers | pag. 1 Pointer = adres in het geheugen, is zelf geen geheugen! Expliciet geheugen aanvragen vóór gebruik.

Slides:



Advertisements
Verwante presentaties
1.larmoire. 2. lescalier 3. La grand-mere 4. Le canapé
Advertisements

De gemiddelde leerling
Maak een scan van uw organisatie met de Toolkit Duurzame Inzetbaarheid
Doublet deel 1 – de basis.
Downloaden: Ad-aware. Downloaden bestaat uit 3 delen: •1. Zoeken naar de plek waar je het bestand kan vinden op het internet •2. Het nemen van een kopie.
Prekenserie Handelingen - deel 6 (slot) ‘Gods Woord overwint omdat het mensen in de vrijheid zet!’ Hand 28,31.
22 april 2009 Cijferboeken Cultuur, Jeugd en Sport Opmaak cijferboeken en website.
ADOBE PRESENTER Willem vanden Berg Dienst Onderwijsondersteuning en –ontwikkeling KaHo Sint-Lieven 1.
Ronde (Sport & Spel) Quiz Night !
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.
1 visual basic flash F3 studentenversie auteursversie.
prNBN D addendum 1 Deel 2: PLT
Diagnosticeer uw schouder Dit is een interactieve gids om u te helpen vinden relevante patiënten informatie over uw schouderprobleem. Het is bedoeld als.
Naar het Jaareinde toe
Excursie Röntgenafdeling Vie Curi Venlo 15 september 2009 ZijActief Koningslust ZijActief Koningslust Excursie Rontgenafdeling Vie Curie Venlo.
© GfK 2012 | Title of presentation | DD. Month
ThinkQuest Projects Leerkrachten uitnodigen om een project te delen.
Omgevingen zijn dan geïmplementeerd als Symbol Tables. Symbol Table mapt een symbool met een Binding Meerdere noties van binding –Meerdere manieren te.
WISKUNDIGE FORMULES.
Digitaal prentenboek Groep 4a. 1 er was eens een tijger. tjeerd.
MEDIALANDSCHAP We onderscheiden: Visuele media Auditieve media
1 SOCS Hoofdstuk 1 Computerarchitectuur. 2 Overzicht Eenvoudig C Arrays Functies Records Dynamische gegevenstructuren Macro’s C.
Instituut voor Sterrenkunde Het Heelal door verschillende brillen bekeken De hemel bij verschillende golflengten.
1/1/ / faculty of Computer Science eindhoven university of technology 5JJ20:Computerarchitectuur 2M200:Inleiding Computersystemen Sessie 7(2): Vertalen.
1Ben Bruidegom A Harvard Machine Calculator Calculator  Computer.
De Pelsmacker,Geuens & Van den Bergh, Marketingcommunicatie, vierde editie © Pearson Education 2011 OHT 1.1 Geïntegreerde communicatie In dit hoofdstuk.
OHT 3.1 De Pelsmacker, Geuens & Van den Bergh, Marketingcommunicatie, vierde editie © Pearson Education 2011 Hoe marketingcommunicatie werkt In dit hoofdstuk.
GESPRG Les 8 Gestructureerd programmeren in C. 101 Array Meerdere variabelen van hetzelfde type kun je samennemen in één array variabele. Stel in een.
In dit vakje zie je hoeveel je moet betalen. Uit de volgende drie vakjes kan je dan kiezen. Er is er telkens maar eentje juist. Ken je het juiste antwoord,
Hoorcollege 7 Collections, arrays. Programma ‘Snowflakes’ Sneeuwvlok object.
Werken aan Intergenerationele Samenwerking en Expertise.
De vierkantjes ! Dit is een puzzel om uw hersens eens goed te laten werken. De vraag is bij elk figuur hoeveel vierkanten u ziet.
Breuken-Vereenvoudigen
CLICK THE END EINDE THE END May peace be with you EINDE Moge de vrede met jou zijn Next time I’ll present you the alphabet Volgende keer bied ik je het.
2009 Tevredenheidsenquête Resultaten Opleidingsinstellingen.
Hoe werkt een rekenmachine?
PLAYBOY Kalender 2006 Dit is wat mannen boeit!.
Het Heiligdom Een Afbeelding voor Redding 4e Kwartaal 2013 INLEIDING
Chronologie van maatregelen tegen de joden in het Derde rijk
DB&SQL8- 1 VBA Visual Basics for Applications: eigen Office versie vanaf Office2000 gelijk voor alle applicaties Programmeren onder meer nodig voor Het.
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  D3EEMS1  programmed I/O: de.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology ; PIC assember programeren 1 Les 3 - onderwerpen Het.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Het ARM bord met wat library functies.
Dames (1e peleton) F-G-M rechts-om-keert (binnendoor) Heren (2e peleton) M-G-F links-om-keert (buitenom)
A H M F K EB C x 91 Van hand veranderen voor de X splitsen en Rechangeren. Met de nieuwe partner op.
A H M F K EB C x 85 Korte zijde bij C 2 e secties volte 14 m en op afstand komen ( 0,5 rijbaan)
A H M F K EB C x 88. Korte zijde bij A en C changement met gebroken lijnen (opsluiten!) Daarna rijden.
ZijActief Koningslust 10 jaar Truusje Trap
Voorrangsregels bij rekenen (1)
OHT 9.1 De Pelsmacker,Geuens & Van den Bergh, Marketingcommunicatie, vierde editie © Pearson Education 2011 Reclameonderzoek In dit hoofdstuk zul je het.
ECHT ONGELOOFLIJK. Lees alle getallen. langzaam en rij voor rij
2 januari 2009Nieuwjaarsreceptie "Meule wal straete" 1 Nieuwjaarsreceptie 2 januari 2009 Eerste bijeenkomst van de bewoners van de “Meule wal straete”
17/08/2014 | pag. 1 Fractale en Wavelet Beeldcompressie Les 5.
17/08/2014 | pag. 1 Fractale en Wavelet Beeldcompressie Les 3.
Fractale en Wavelet Beeldcompressie
Fractale en Wavelet Beeldcompressie
USABILITY MYTHBUSTERS BASTIAAN KLOOSTER & PETER AKERBOOM CONGRES WEBREDACTIE 2011.
1/1/ / faculty of Computer Science eindhoven university of technology 5B040:Computerarchitectuur 2M200:Inleiding Computersystemen Sessie 9(2): Virtual.
Leren lezen op de Wijngaard : kern 2 door juf Martine
De financiële functie: Integrale bedrijfsanalyse©
Oefeningen Workshop RIE Gemeenten
C++ C++ als een verbetering van C Abstracte datatypen met classes Constructoren en destructoren Subklassen binding van functies 1.
De vierkantjes ! Dit is een puzzel om uw hersens eens goed te laten werken. De vraag is bij elk figuur hoeveel vierkanten u ziet.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 2 definitie.
1 Zie ook identiteit.pdf willen denkenvoelen 5 Zie ook identiteit.pdf.
Strijd tegen de zonde?.
ZijActief Koningslust
Transcript van de presentatie:

TOPIC O: Pointers | pag. 1 Pointer = adres in het geheugen, is zelf geen geheugen! Expliciet geheugen aanvragen vóór gebruik & Expliciet geheugen vrijmaken na gebruik! Voordelen:  Dynamisch aanmaken van geheugen voor bvb arrays …  Recursieve definitie van gegevens, bvb voor lijsten, binaire bomen, …

TOPIC O: Pointers | pag. 2 MODULE PointerIntro; TYPE mytype = POINTER TO RECORD eerste: CARDINAL; tweede: ARRAY[1..10],[1..10] OF RECORD knal: CARDINAL; boem: POINTER TO ARRAY OF CARDINAL; END ; VAR p: mytype; i,j: INTEGER; BEGIN NEW(p); p^.eerste := 101; p^.tweede[5][8].knal := 102; NEW(p^.tweede[5][8].boem,15); p^.tweede[5][8].boem^[10] := 103; WrCard(p^.eerste,2);WrLn; WrCard(p^.tweede[5][8].knal,2);WrLn; WrCard(p^.tweede[5][8].boem^[10],2);WrLn; DISPOSE(p^.tweede[5][8].boem); (* ALLE dynamisch aangemaakte variabelen (dmv NEW()) moeten gedisposed worden! *) DISPOSE(p); END PointerIntro. Syntax: definitie

TOPIC O: Pointers | pag. 3 MODULE PointerIntro; TYPE mytype = POINTER TO RECORD eerste: CARDINAL; tweede: ARRAY[1..10],[1..10] OF RECORD knal: CARDINAL; boem: POINTER TO ARRAY OF CARDINAL; END ; VAR p: mytype; i,j: INTEGER; BEGIN NEW(p); p^.eerste := 101; p^.tweede[5][8].knal := 102; NEW(p^.tweede[5][8].boem,15); p^.tweede[5][8].boem^[10] := 103; WrCard(p^.eerste,2);WrLn; WrCard(p^.tweede[5][8].knal,2);WrLn; WrCard(p^.tweede[5][8].boem^[10],2);WrLn; DISPOSE(p^.tweede[5][8].boem); (* ALLE dynamisch aangemaakte variabelen (dmv NEW()) moeten gedisposed worden! *) DISPOSE(p); END PointerIntro. Pointers zijn adressen, geen geheugen!!!

TOPIC O: Pointers | pag. 4 MODULE PointerIntro; TYPE mytype = POINTER TO RECORD eerste: CARDINAL; tweede: ARRAY[1..10],[1..10] OF RECORD knal: CARDINAL; boem: POINTER TO ARRAY OF CARDINAL; END ; VAR p: mytype; i,j: INTEGER; BEGIN NEW(p); p^.eerste := 101; p^.tweede[5][8].knal := 102; NEW(p^.tweede[5][8].boem,15); p^.tweede[5][8].boem^[10] := 103; WrCard(p^.eerste,2);WrLn; WrCard(p^.tweede[5][8].knal,2);WrLn; WrCard(p^.tweede[5][8].boem^[10],2);WrLn; DISPOSE(p^.tweede[5][8].boem); (* ALLE dynamisch aangemaakte variabelen (dmv NEW()) moeten gedisposed worden! *) DISPOSE(p); END PointerIntro. Pointers zijn adressen, geen geheugen!!!  VOORDELEN?

TOPIC O: Pointers | pag. 5 MODULE PointerIntro; TYPE mytype = POINTER TO RECORD eerste: CARDINAL; tweede: ARRAY[1..10],[1..10] OF RECORD knal: CARDINAL; boem: POINTER TO ARRAY OF CARDINAL; END ; VAR p: mytype; i,j: INTEGER; BEGIN NEW(p); p^.eerste := 101; p^.tweede[5][8].knal := 102; NEW(p^.tweede[5][8].boem,15); p^.tweede[5][8].boem^[10] := 103; WrCard(p^.eerste,2);WrLn; WrCard(p^.tweede[5][8].knal,2);WrLn; WrCard(p^.tweede[5][8].boem^[10],2);WrLn; DISPOSE(p^.tweede[5][8].boem); (* ALLE dynamisch aangemaakte variabelen (dmv NEW()) moeten gedisposed worden! *) DISPOSE(p); END PointerIntro. Pointers zijn adressen, geen geheugen!!! Voordelen: -p en boem nemen geen plaats in, zolang er niet expliciet geheugen voor wordt gereserveerd.

TOPIC O: Pointers | pag. 6 MODULE PointerIntro; TYPE mytype = POINTER TO RECORD eerste: CARDINAL; tweede: ARRAY[1..10],[1..10] OF RECORD knal: CARDINAL; boem: POINTER TO ARRAY OF CARDINAL; END ; VAR p: mytype; i,j: INTEGER; BEGIN NEW(p); p^.eerste := 101; p^.tweede[5][8].knal := 102; NEW(p^.tweede[5][8].boem,15); p^.tweede[5][8].boem^[10] := 103; WrCard(p^.eerste,2);WrLn; WrCard(p^.tweede[5][8].knal,2);WrLn; WrCard(p^.tweede[5][8].boem^[10],2);WrLn; DISPOSE(p^.tweede[5][8].boem); (* ALLE dynamisch aangemaakte variabelen (dmv NEW()) moeten gedisposed worden! *) DISPOSE(p); END PointerIntro. Pointers zijn adressen, geen geheugen!!!  Eerst geheugen reserveren!

TOPIC O: Pointers | pag. 7 MODULE PointerIntro; TYPE mytype = POINTER TO RECORD eerste: CARDINAL; tweede: ARRAY[1..10],[1..10] OF RECORD knal: CARDINAL; boem: POINTER TO ARRAY OF CARDINAL; END ; VAR p: mytype; i,j: INTEGER; BEGIN NEW(p); p^.eerste := 101; p^.tweede[5][8].knal := 102; NEW(p^.tweede[5][8].boem,15); p^.tweede[5][8].boem^[10] := 103; WrCard(p^.eerste,2);WrLn; WrCard(p^.tweede[5][8].knal,2);WrLn; WrCard(p^.tweede[5][8].boem^[10],2);WrLn; DISPOSE(p^.tweede[5][8].boem); (* ALLE dynamisch aangemaakte variabelen (dmv NEW()) moeten gedisposed worden! *) DISPOSE(p); END PointerIntro. Pointers zijn adressen, geen geheugen!!!  Eerst geheugen reserveren!  Variabele: NEW(p)

TOPIC O: Pointers | pag. 8 MODULE PointerIntro; TYPE mytype = POINTER TO RECORD eerste: CARDINAL; tweede: ARRAY[1..10],[1..10] OF RECORD knal: CARDINAL; boem: POINTER TO ARRAY OF CARDINAL; END ; VAR p: mytype; i,j: INTEGER; BEGIN NEW(p ); p^.eerste := 101; p^.tweede[5][8].knal := 102; NEW(p^.tweede[5][8].boem,15); p^.tweede[5][8].boem^[10] := 103; WrCard(p^.eerste,2);WrLn; WrCard(p^.tweede[5][8].knal,2);WrLn; WrCard(p^.tweede[5][8].boem^[10],2);WrLn; DISPOSE(p^.tweede[5][8].boem); (* ALLE dynamisch aangemaakte variabelen (dmv NEW()) moeten gedisposed worden! *) DISPOSE(p); END PointerIntro. Pointers zijn adressen, geen geheugen!!!  Gebruiken  p^ => RECORD

TOPIC O: Pointers | pag. 9 MODULE PointerIntro; TYPE mytype = POINTER TO RECORD eerste: CARDINAL; tweede: ARRAY[1..10],[1..10] OF RECORD knal: CARDINAL; boem: POINTER TO ARRAY OF CARDINAL; END ; VAR p: mytype; i,j: INTEGER; BEGIN NEW(p); p^.eerste := 101; p^.tweede[5][8].knal := 102; NEW(p^.tweede[5][8].boem,15); p^.tweede[5][8].boem^[10] := 103; WrCard(p^.eerste,2);WrLn; WrCard(p^.tweede[5][8].knal,2);WrLn; WrCard(p^.tweede[5][8].boem^[10],2);WrLn; DISPOSE(p^.tweede[5][8].boem); (* ALLE dynamisch aangemaakte variabelen (dmv NEW()) moeten gedisposed worden! *) DISPOSE(p); END PointerIntro. Pointers zijn adressen, geen geheugen!!!  Eerst geheugen reserveren!  Open Array: NEW(x,Aantal_kotjes)

TOPIC O: Pointers | pag. 10 MODULE PointerIntro; TYPE mytype = POINTER TO RECORD eerste: CARDINAL; tweede: ARRAY[1..10],[1..10] OF RECORD knal: CARDINAL; boem: POINTER TO ARRAY OF CARDINAL; END ; VAR p: mytype; i,j: INTEGER; BEGIN NEW(p); p^.eerste := 101; p^.tweede[5][8].knal := 102; NEW(p^.tweede[5][8].boem,15); p^.tweede[5][8].boem^[10] := 103; WrCard(p^.eerste,2);WrLn; WrCard(p^.tweede[5][8].knal,2);WrLn; WrCard(p^.tweede[5][8].boem^[10],2);WrLn; DISPOSE(p^.tweede[5][8].boem); (* ALLE dynamisch aangemaakte variabelen (dmv NEW()) moeten gedisposed worden! *) DISPOSE(p); END PointerIntro. Pointers zijn adressen, geen geheugen!!! Open Array: VOORDELEN  Dynamisch aanmaken van geheugen  Mogelijk voor elke array een verschillende grootte te geven

TOPIC O: Pointers | pag. 11 MODULE PointerIntro; TYPE mytype = POINTER TO RECORD eerste: CARDINAL; tweede: ARRAY[1..10],[1..10] OF RECORD knal: CARDINAL; boem: POINTER TO ARRAY OF CARDINAL; END ; VAR p: mytype; i,j: INTEGER; BEGIN NEW(p); p^.eerste := 101; p^.tweede[5][8].knal := 102; NEW(p^.tweede[5][8].boem,15); p^.tweede[5][8].boem^[10] := 103; WrCard(p^.eerste,2);WrLn; WrCard(p^.tweede[5][8].knal,2);WrLn; WrCard(p^.tweede[5][8].boem^[10],2);WrLn; DISPOSE(p^.tweede[5][8].boem); (* ALLE dynamisch aangemaakte variabelen (dmv NEW()) moeten gedisposed worden! *) DISPOSE(p); END PointerIntro. Pointers zijn adressen, geen geheugen!!! LET OP! - Gereserveerd geheugen moet vrijgegeven worden: DISPOSE(..)

TOPIC O: Pointers | pag. 12 Pointers zijn adressen, geen geheugen!!! Geheugen moet gereserveerd worden: NEW(…) Geheugen moet vrijgegeven worden: DISPOSE(…) MOGELIJKE PROBLEMEN:

TOPIC O: Pointers | pag. 13 Pointers zijn adressen, geen geheugen!!! Geheugen moet gereserveerd worden: NEW(…) Geheugen moet vrijgegeven worden: DISPOSE(…) MOGELIJKE PROBLEMEN:  MEMORY LEAKS: de volgorde van vrijgeven is belangrijk + zorg steeds dat je aan het stukje geheugen kan!

TOPIC O: Pointers | pag. 14 Pointers zijn adressen, geen geheugen!!! Geheugen moet gereserveerd worden: NEW(…) Geheugen moet vrijgegeven worden: DISPOSE(…) MOGELIJKE PROBLEMEN:  MEMORY LEAKS: de volgorde van vrijgeven is belangrijk + zorg steeds dat je aan het stukje geheugen kan!  MEMORY CORRUPTIE: Vrijgegeven geheugen mag geen link meer hebben in statische variabelen.

TOPIC O: Pointers | pag. 15 DISPOSE(p^.tweede[5][8].boem); DISPOSE(p); OK! MEMORY LEAK: DISPOSE(…)  in de juiste volgorde!!!

TOPIC O: Pointers | pag. 16 DISPOSE(p); DISPOSE(p^.tweede[5][8].boem); NIET OK!  p is niet meer toegangelijk na DISPOSE  boem kan niet meer verwijderd worden, want link is verdwenen  MEMORY LEAK!!! MEMORY LEAK: DISPOSE(…)  in de juiste volgorde!!!

TOPIC O: Pointers | pag. 17 PROCEDURE addToList(myList: ptrList); VAR temp: ptrList; BEGIN NEW(temp); temp.next := myList; END addToList; VAR funnyList: ptrList; BEGIN …. addToList(funnyList); MEMORY LEAK: NEW()  Zorg dat de link niet verdwijnt

TOPIC O: Pointers | pag. 18 PROCEDURE addToList(myList: ptrList); VAR temp: ptrList; BEGIN NEW(temp); temp.next := myList; END addToList; VAR funnyList: ptrList; BEGIN …. addToList(funnyList); MEMORY LEAK: NEW()  Zorg dat de link niet verdwijnt Geheugen reserveren

TOPIC O: Pointers | pag. 19 PROCEDURE addToList(myList: ptrList); VAR temp: ptrList; BEGIN NEW(temp); temp.next := myList; END addToList; VAR funnyList: ptrList; BEGIN …. addToList(funnyList); MEMORY LEAK: NEW()  Zorg dat de link niet verdwijnt Geheugen reserveren Na oproep, funnyList = NIL  Geen link naar gereserveerd geheugen  MEMORY LEAK

TOPIC O: Pointers | pag. 20 Pointers zijn adressen, geen geheugen!!! Geheugen moet gereserveerd worden: NEW(…) Geheugen moet vrijgegeven worden: DISPOSE(…) MOGELIJKE PROBLEMEN:  MEMORY CORRUPTIE: Vrijgegeven geheugen mag geen link meer hebben in statische variabelen.

TOPIC O: Pointers | pag. 21 Pointers zijn adressen, geen geheugen!!! Geheugen moet gereserveerd worden: NEW(…) Geheugen moet vrijgegeven worden: DISPOSE(…) PROCEDURE disposeList(myList: ptrList); VAR temp: ptrList; BEGIN WHILE myList # NIL DO temp = myList; myList = myList.next; DISPOSE(temp); END; END disposeList; VAR funnyList: ptrList; BEGIN …. disposeList(funnyList);

TOPIC O: Pointers | pag. 22 PROCEDURE disposeList(myList: ptrList); VAR temp: ptrList; BEGIN WHILE myList # NIL DO temp = myList; myList = myList.next; DISPOSE(temp); END; END disposeList; VAR funnyList: ptrList; BEGIN …. disposeList(funnyList); Item 1 Item 2 Item 3 Item 4 Item 1 Item 2 Item 3 Item 4 Geheugen gereserveerd

TOPIC O: Pointers | pag. 23 PROCEDURE disposeList(myList: ptrList); VAR temp: ptrList; BEGIN WHILE myList # NIL DO temp = myList; myList = myList.next; DISPOSE(temp); END; END disposeList; VAR funnyList: ptrList; BEGIN …. disposeList(funnyList); Item 1 Item 2 Item 3 Item 4 Item 1 Item 2 Item 3 Item 4 Geheugen vrij gegeven!

TOPIC O: Pointers | pag. 24 PROCEDURE disposeList(myList: ptrList); VAR temp: ptrList; BEGIN WHILE myList # NIL DO temp = myList; myList = myList.next; DISPOSE(temp); END; END disposeList; VAR funnyList: ptrList; BEGIN …. disposeList(funnyList); … addNewItem(funnyList, newFunnything); Item 1 Item 2 Item 3 Item 4 Item 1 Item 2 Item 3 Item 5

TOPIC O: Pointers | pag. 25 PROCEDURE disposeList(myList: ptrList); VAR temp: ptrList; BEGIN WHILE myList # NIL DO temp = myList; myList = myList.next; DISPOSE(temp); END; END disposeList; VAR funnyList: ptrList; BEGIN …. disposeList(funnyList); … addNewItem(funnyList, newFunnything); Item 1 Item 2 Item 3 Item 4 Item 1 Item 2 Item 3 Item 5 Maar Item 4 = Item 5 in geheugen

TOPIC O: Pointers | pag. 26 PROCEDURE disposeList(myList: ptrList); VAR temp: ptrList; BEGIN WHILE myList # NIL DO temp = myList; myList = myList.next; DISPOSE(temp); END; END disposeList; VAR funnyList: ptrList; BEGIN …. disposeList(funnyList); … addNewItem(funnyList, newFunnything); Item 1 Item 2 Item 3 Item 5 Item 1 Item 2 Item 3 Item 5 Maar Item 4 = Item 5 in geheugen

TOPIC O: Pointers | pag. 27 PROCEDURE disposeList(myList: ptrList); VAR temp: ptrList; BEGIN WHILE myList # NIL DO temp = myList; myList = myList.next; DISPOSE(temp); END; END disposeList; VAR funnyList: ptrList; BEGIN …. disposeList(funnyList); … addNewItem(funnyList, newFunnything); Item 1 Item 2 Item 3 Item 5 Item 1 Item 2 Item 3 Item 5 CORRUPT GEHEUGEN!!!