9 Zeiger (Pointer). Dynamischer Speicher
|
|
|
- Joseph Gerstle
- vor 9 Jahren
- Abrufe
Transkript
1 9 Zeiger (Pointer). Dynamischer Speicher Jörn Loviscach Versionsstand: 25. September 2013, 18:07 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Germany License. To view a copy of this license, visit or send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA. Bitte hier notieren, was beim Bearbeiten unklar geblieben ist 1 Idee Jede Variable muss irgendwo im Speicher abgelegt sein. (Oder in einem Register, aber diese Komplikation ignorieren wir mal.) Der Speicher ist in Bytes unterteilt; man kann zählen, bei dem wievielten Byte des Speichers die Daten einer bestimmten Variable beginnen: Das ist die Adresse der Variable: 1 In C und C++ kann man mit dem Operator & nach der Adresse einer Variablen fragen und diesen in einer Zeigervariablen ablegen. Deren Typ ist dann Zeiger auf int usw., angezeigt durch ein Sternchen: 1
2 2 ZEIGERARITHMETIK 2 2 Demo mit der Speicheransicht im Debugger. Das Sternchen * ist auch ein Operator, um einen Zeiger zu einer Variablen zu machen, die man lesen und schreiben kann: 3 Das ist natürlich wieder riskant, weil man so irgendwo im Speicher lesen und schreiben kann: 4 Die Adresse 0 hat eine besondere Bedeutung: Kein gespeichertes Objekt darf hier liegen. Mit dem Wert 0 gerne mit dem Makro NULL aus <stddef.h> geschrieben kann man also kennzeichnen, dass ein Zeiger ungültig ist. Auf größeren Rechnern als dem Mikrocontroller führt jeder Zugriff darauf [dereferencing a null pointer] zum Abbruch des Programms führen. In moderneren Sprachen muss man dafür immer ausdrücklich null schreiben, niemals 0. Also lieber auch in C und C++ immer NULL schreiben. 2 Zeigerarithmetik Der Name eines Arrays steht in C und C++ für einen Zeiger auf das erste Element: 5 Das geht auch umgekehrt: Ein Zeiger kann wie ein Array verwendet werden. Beispiel:
3 3 DYNAMISCHER SPEICHER 3 6 Obendrein kann man auch direkt mit Zeigern rechnen ( Zeigerarithmetik ): Zu einem Zeiger etwas zu addieren, heißt, ihn um genau so viele Speicherstellen des entsprechenden Typs weiterzustellen also im Zweifelsfall nicht um diese Zahl an Bytes: 7 Nach int a[] = {1, 2, 3}; int *p = a; gibt es damit mindestens vier Möglichkeiten, auf a[2] zuzugreifen: 8 Das Suchen aller 'a' und Ersetzen durch 'e' in einer Zeichenkette kann man nun so schreiben: 9 3 Dynamischer Speicher Anders als in C99 und in modereren Sprachen muss man für Arrays in C++ und alten Varianten von C im Programmtext eine feste Größe angeben. Dort darf man zum Beispiel nicht dies schreiben: 10 In der IAR Embedded Workbench ist auch in C99 noch der Schalter Allow VLA in Options > C/C++ Compiler > Language nötig.
4 3 DYNAMISCHER SPEICHER 4 Dass man sich schon vor dem Compilieren auf eine Größe der Arrays festlegen muss, ist natürlich äußerst ungeschickt. Oft weiß man vorher nicht, wie viele Daten man unterbringen muss, und hat aber auch nicht genug Speicher, um einfach auf Verdacht so viel wie nur möglich zu reservieren. Um trotzdem mit veränderlichen Mengen an Daten umzugehen, kann man C mit der int <stdlib.h> deklarierten Funktion malloc bitten, einem einen Zeiger auf soundsoviele freie Bytes im Speicher zu geben. Wenn man diese Bytes nicht mehr benötigt, muss man sie mit free wieder freigeben, sonst bleiben sie bis zum Programmende blockiert ( Speicherleck ). So sieht das aus: 11 Der Programmierer ist dafür verantwortlich, dass free aufgerufen wird und zwar nur einmal für denselben Zeiger. Es ist eine gute Praxis, einen Zeiger nach dem Freigeben auf NULL zu setzen. Dann führt jeder Zugriff darauf zum Absturz statt zu korrupten Daten. Außerdem garantiert der Standard, dass free(null) nichts tut. Bei den üblichen automatisch Variablen sorgt der Compiler selbst dafür, dass ihr Speicher wieder freigegeben wird. Beispiel: 12 malloc liefert einen Nullzeiger, wenn kein Platz mehr zu haben ist (Demo). Also sollte prüfen, ob das Ergebnis null ist und in diesem Fall zum Beispiel keine neuen Messwerte mehr annehmen o. ä. Auf dem MSP430G2231 gibt es mit 128 Byte derart wenig Platz, dass malloc sowieso immer fehlschlägt. malloc gibt den Speicher im Zweifelsfall mit den Werten gefüllt, die vorher mal drinstanden. Die Funktion calloc setzt dagegen alle Bits auf null. Mit realloc kann man bereits reservierten Speicher vergrößern oder verkleinern. Mehrdimensionale Arrays, deren Größe beim Compilieren noch nicht feststeht, kann man damit über einen Umweg bauen:
5 3 DYNAMISCHER SPEICHER 5 13 Demo in der Speicheransicht des Debuggers. Für den leichteren Umgang mit Zeigern auf Strukturen kann man statt (*p).m übersichtlicher p->m schreiben: 14
10 Die Programmiersprache C99: Zusammenfassung
10 Die Programmiersprache C99: Zusammenfassung Jörn Loviscach Versionsstand: 25. September 2014, 18:40 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html
Zeichenketten (Strings) in C
Zeichenketten (Strings) in C Jörn Loviscach Versionsstand: 7. Oktober 2011, 11:27 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen in der Vorlesung. Videos dazu: http://www.j3l7h.de/videos.html
27 Zufallsvariablen. Erwartungswert. Median. Perzentilen
27 Zufallsvariablen. Erwartungswert. Median. Perzentilen Jörn Loviscach Versionsstand: 21. September 2013, 15:56 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html
17 Grundrechenarten für komplexe Zahlen
7 Grundrechenarten für komplexe Zahlen Jörn Loviscach Versionsstand: 2. September 203, 5:58 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html
1 Äquivalenzumformungen, Lösungsmenge
5 Ungleichungen Jörn Loviscach Versionsstand: 21. September 2013, 15:55 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html This work is
29 Schätzung von Erwartungswert und Varianz
29 Schätzung von Erwartungswert und Varianz Jörn Loviscach Versionsstand: 21. September 2013, 15:55 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html
22 Fehlerfortpflanzung und Extrema bei Funktionen mehrerer Veränderlicher
22 Fehlerfortpflanzung und Extrema bei Funktionen mehrerer Veränderlicher Jörn Loviscach Versionsstand: 21. März 2014, 21:11 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der
22 Lineare Näherung. Anwendungen
22 Lineare Näherung. Anwendungen Jörn Loviscach Versionsstand: 21. September 2013, 15:57 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html
27 Zufallsvariablen. Erwartungswert. Median. Perzentilen
27 Zufallsvariablen. Erwartungswert. Median. Perzentilen Jörn Loviscach Versionsstand: 7. Januar 2011, 21:03 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen in der Vorlesung. Videos dazu:
Die Programmiersprache C99: Zusammenfassung
Die Programmiersprache C99: Zusammenfassung Jörn Loviscach Versionsstand: 7. Dezember 2010, 19:30 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen in der Vorlesung. Videos dazu: http://www.youtube.com/joernloviscach
19 Folgen. Grenzwerte. Stetigkeit
19 Folgen. Grenzwerte. Stetigkeit Jörn Loviscach Versionsstand: 27. Dezember 2014, 16:35 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html
3 Klassen, Attribute, Methoden
3 Klassen, Attribute, Methoden Jörn Loviscach Versionsstand: 10. April 2011, 10:25 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen in der Vorlesung. Videos dazu: http://www.j3l7h.de/videos.html
14 Partialbruchzerlegung
14 Partialbruchzerlegung Jörn Loviscach Versionsstand: 21. September 2013, 15:59 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html This
In den USA verwendet man statt dessen eckige Klammern, was sich in der Software niederschlägt (mit Ausnahmen wie Wolfram Alpha):
3 Matrizen Jörn Loviscach Versionsstand: 28. März 2015, 21:32 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html This work is licensed
1 Begriff Kombinatorik; Zahl aller Teilmengen
6 Kombinatorik Jörn Loviscach Versionsstand: 2. Dezember 2011, 16:25 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen in der Vorlesung. Videos dazu: http://www.j3l7h.de/videos.html This work
3 Klassen, Attribute, Methoden
3 Klassen, Attribute, Methoden Jörn Loviscach Versionsstand: 21. März 2014, 22:58 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html This
7 Dateien und Datenströme (Streams)
7 Dateien und Datenströme (Streams) Jörn Loviscach Versionsstand: 21. März 2014, 22:57 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html
8 Design Patterns. Events
8 Design Patterns. Events Jörn Loviscach Versionsstand: 28. März 2015, 19:13 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html This work
3 Mengen, Logik. 1 Naive Mengenlehre
3 Mengen, Logik Jörn Loviscach Versionsstand: 21. September 2013, 15:53 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html This work is
23 Integral. 1 Idee des Integrals
23 Integral Jörn Loviscach Versionsstand: 21. September 2013, 15:56 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html This work is licensed
2 Geradengleichungen in Parameterform. Länge und Skalarprodukt
2 Geradengleichungen in Parameterform. Länge und Skalarprodukt Jörn Loviscach Versionsstand: 19. März 2011, 15:33 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen in der Vorlesung. Videos dazu:
15 Restabschätzung nach Taylor. Potenzreihen
15 Restabschätzung nach Taylor. Potenzreihen Jörn Loviscach Versionsstand: 21. März 2014, 21:09 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html
In den USA verwendet man statt dessen eckige Klammern, was sich in der Software niederschlägt (mit Ausnahmen wie Wolfram Alpha):
3 Matrizen Jörn Loviscach Versionsstand: 20. März 2012, 16:02 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen in der Vorlesung. Videos dazu: http://www.j3l7h.de/videos.html This work is licensed
25 Elementare Längen, Flächen und Volumina. Bogenlänge. Rotationskörper
25 Elementare Längen, Flächen und Volumina. Bogenlänge. Rotationskörper Jörn Loviscach Versionsstand: 29. September 2012, 19:49 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen
2 Grundlagen zu Ableitung und Integral
2 Grundlagen zu Ableitung und Integral Jörn Loviscach Versionsstand: 21. September 2013, 15:52 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html
8 Relationen, Umkehrung
8 Relationen, Umkehrung Jörn Loviscach Versionsstand: 29. September 2012, 19:37 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html This
Die nummerierten Felder bitte mithilfe der Videos ausfüllen:
5 Koordinatensysteme Zoltán Zomotor Versionsstand: 6. August 2015, 21:43 Die nummerierten Felder bitte mithilfe der Videos ausfüllen: http://www.z5z6.de This work is based on the works of Jörn Loviscach
4 Vererbung, Polymorphie
4 Vererbung, Polymorphie Jörn Loviscach Versionsstand: 21. März 2014, 22:57 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html This work
14 Schmiegeparabel und Freunde, Taylor-Reihe
14 Schmiegeparabel und Freunde, Taylor-Reihe Jörn Loviscach Versionsstand: 20. März 2012, 16:01 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen in der Vorlesung. Videos dazu: http://www.j3l7h.de/videos.html
4 Zahlenbereiche. 1 Natürliche, ganze und rationale Zahlen
4 Zahlenbereiche Jörn Loviscach Versionsstand: 21. September 2013, 15:53 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html This work
24 Mehrdimensionale Integrale
24 Mehrdimensionale Integrale Jörn Loviscach Versionsstand: 20. März 2012, 16:00 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen in der Vorlesung. Videos dazu: http://www.j3l7h.de/videos.html
6 Vektoranalysis Kurven
6 Vektoranalysis Kurven Zoltán Zomotor Versionsstand: 31. Juli 2014, 13:51 Die nummerierten Felder bitte mithilfe der Videos ausfüllen: http://www.z5z6.de This work is based on the works of Jörn Loviscach
16 Trigonometrie: Sinus und Freunde, Arcusfunktionen
6 Trigonometrie: Sinus und Freunde, Arcusfunktionen Jörn Loviscach Versionsstand: 2. Dezember 20, 6:28 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen in der Vorlesung. Videos dazu: http://www.j3l7h.de/videos.html
Potenzen und Wurzeln komplexer Zahlen. Eulersche Identität. Polardarstellung. Additionstheoreme. Vollständige Faktorisierung von Polynomen
Potenzen und Wurzeln komplexer Zahlen. Eulersche Identität. Polardarstellung. Additionstheoreme. Vollständige Faktorisierung von Polynomen Jörn Loviscach Versionsstand: 3. Dezember 200, 20:42 Die nummerierten
18 Kontinuierliche Fourier-Transformation. Laplace-Transformation
18 Kontinuierliche Fourier-Transformation. Laplace-Transformation Jörn Loviscach Versionsstand: 28. März 2015, 21:30 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos:
Zeiger. C-Kurs 2012, 2. Vorlesung. Tino Kutschbach 10.
Zeiger C-Kurs 2012, 2. Vorlesung Tino Kutschbach [email protected] http://wiki.freitagsrunde.org 10. September 2012 This work is licensed under the Creative Commons Attribution-ShareAlike
Dynamischer Speicher
Dynamischer Speicher C-Kurs 2012, 3. Vorlesung Tino Kutschbach [email protected] http://wiki.freitagsrunde.org 13. September 2012 This work is licensed under the Creative Commons Attribution-ShareAlike
Die nummerierten Felder bitte mithilfe der Videos ausfüllen:
5 Optimale Regelung Zoltán Zomotor Versionsstand: 6. März 5, 9:8 Die nummerierten Felder bitte mithilfe der Videos ausfüllen: http://www.z5z6.de This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike
1 Wahrscheinlichkeitsrechnung und Zufallsvariablen
1 Wahrscheinlichkeitsrechnung und Zufallsvariablen Zoltán Zomotor Versionsstand: 18. Mai 2015, 09:29 Die nummerierten Felder bitte während der Vorlesung ausfüllen. This work is licensed under the Creative
Exponentialfunktionen, Eulersche Zahl, Logarithmen
Exponentialfunktionen, Eulersche Zahl, Logarithmen Jörn Loviscach Versionsstand: 22. Oktober 2010, 23:29 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen in der Vorlesung. Videos dazu: http://www.youtube.com/joernloviscach
C/C++-Programmierung
1 C/C++-Programmierung Speicherverwaltung, 0, const Sebastian Hack Christoph Mallon (hack mallon)@cs.uni-sb.de Fachbereich Informatik Universität des Saarlandes Wintersemester 2009/2010 2 Speicherverwaltung
Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny
Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny 9. Zeiger Arbeitsspeicher / Adressen Der Arbeitsspeicher des Computers (RAM) besteht aus einem Feld von Speicherzellen, beginnend bei Adresse
9 Multithreading. 1 Idee des Multithreading
9 Multithreading Jörn Loviscach Versionsstand: 21. Juli 2015, 11:50 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html This work is licensed
6. Zeiger Allgemeines Definition eines Zeigers
6. Zeiger www.c-programme.de Stefan Thiemert Kapitel 6 - Seite 1 von 6 6. 1. Allgemeines Zeiger spielen in der Programmierung eine wichtige Rolle. Sie sind wichtig, bei der Arbeit mit Arrays und Funktionen.
IP Rechnen. Modul 127. Copyright by Janik von Rotz
Modul 127 Copyright by Janik von Rotz Titel Typ Kategorie Version 1.2 Thema Modul 127 Klasse öffentlich Freigabe Datum 05.05.2012 Autor Janik von Rotz Status Status Schlüsselwörter Kommentare 1 Netzklassencodierung
Software Entwicklung 1
Software Entwicklung 1 Annette Bieniusa Peter Zeller AG Softech FB Informatik TU Kaiserslautern Speichermanagement Wie viel Speicher braucht ein Programm? Wofür wird Speicher benötigt? Wie ist der Speicher
Schleifen und Arrays Javakurs
Schleifen und Arrays Javakurs Sebastian Dyroff Robert Buchholz freitagsrunde.org/javakurs 24. März 2009 Was ist das Problem? System.out.println(5); System.out.println(4); System.out.println(3); System.out.println(2);
Programmierung mit C Zeiger
Programmierung mit C Zeiger Zeiger (Pointer)... ist eine Variable, die die Adresse eines Speicherbereichs enthält. Der Speicherbereich kann... kann den Wert einer Variablen enthalten oder... dynamisch
