ESP Tutorium Studienassistent: Ewald Moitzi Gruppe 1.

Slides:



Advertisements
Ähnliche Präsentationen
Einführung in die Programmiersprache C/C++
Advertisements

Imperative Programmierung
Vorbereitung: struct knoten { int x; struct knoten *l, *r; } *b, *bh, **bp; b: Zeiger auf Wurzel bh: Hilfszeiger bp: Zeiger auf Zeiger auf knoten b bp.
Forschungszentrum caesar
Funktionen und Module Einführung anhand des Beispiels Wörter sortieren Timm Grams Fachhochschule Fulda Fachbereich Elektrotechnik und Informationstechnik.
Agenda Sitzung 2 für den Programmaufbau
C Tutorium – Fehlerbehandlung – Knut Stolze. 2 Grundsatz Also ist auch nach jedem Funktionsaufruf auf Fehler zu prüfen!! Jeder(!) Funktionsaufruf kann.
6. Der OpenMP Standard Direktiven-basiertes API zur Programmierung von Parallelrechnern mit gemeinsamem Speicher für FORTRAN, C und C++
Kapitel 3: Listen Lineare Liste: endliche Folge von Elementen eines Grundtyps (n>=0), leere Liste falls n=0 Listenelemente besitzen.
Sequentielle Liste - Array
Java: Dynamische Datentypen
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Dynamischer Speicher. Ein Vergleich aus dem täglichen Leben...
Dynamischer Speicher und Struktur
Processing: Arrays & Laden von Dateien Aufbauend auf dem Beispiel: File I/O LoadFile1.
Tag 2 Look-up-Tabellen, Zufallszahlen, Listen, Speichermanagement und Dateiverwaltung Quelle: 3D-Spiele mit C++ und DirectX in 21 Tagen, Alexander.
Einführung in Visual C++
Arrays,Strings&Pointer in C/C++
Java programmieren mit JavaKara
Programmieren in C Zeichen-/Stringfunktionen Dynamischer Speicher
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Einführung in die Programmiersprache C 4
Informatik 1 Letzte Übung.
VP1 VP2 VP3 PP1.1 PP2.1 PP2.2 PP1.2 PP2.3 PP1.3 MMU VP1 VP2 VP3 PP1 PP4 PP6 MMU-Konfiguration für Prozess P1 Virtual Memory von P1 Physical Memory.
Arduino Kurs Abend 2.
Arrays und ArrayLists In JAVA.
BMEVIEEA100 Grundlagen der Programmierung
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
Arrays und ArrayLists In JAVA.
Java-Kurs - 3. Übung Hausaufgabe Arrays For-Schleifen.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
C Tutorium – Shared Memory – Knut Stolze. 2 Shared Memory Ein Speicherbereich, auf den mehrere Prozesse Zugriff haben – Also kein privater Speicher –
C Tutorium – Memory Management – Knut Stolze. 2 Agenda Einführung in die Speicherverwaltung Stack vs. Heap Malloc Free Sizeof Tipps/Hinweise.
Pointer. Precompiled Header  Vorübersetzung eingebundener Dateien häufig genutzt, selten geändert  Projekttyp „Win32 Console Application“
Tutorium Software-Engineering SS14 Florian Manghofer.
Pointer, Arrays und verkettete Listen. Mehrdimensionale Arrays  Pointer auf ein Array von Pointern  int32 **matrix = new int32*[3];  matrix: Zeiger.
Strukturen (Eigenschaften) Strukturen dienen zur Zusammenfassung mehrerer Komponenten verschiedener Typen zu einer Einheit, die dann mit gemeinsamen Namen.
Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung.
Singletons, Exceptions und (s)printf. Template Klassen  äquivalent zu Template-Funktionen  beim Erzeugen von Instanzen muss der Typ angegeben werden.
ESP Tutorium Studienassistent: Ewald Moitzi Gruppe 1.
Michael Artin: Geometric Algebra
Herstellung von kristallinen Metalloxiden über die Schmelze mit einem Spiegelofen Gruppe 8: Yuki Meier, Vivien Willems, Andrea Scheidegger, Natascha Gray.
(dynamische Speicheranalyse)
Übersicht
Prozessoptimierung aus einem anderem Blickwinkel
Fachdidaktisches Seminar Geobiologie; WS 2016/17
Programmieren in C Zeichen-/Stringfunktionen Dynamischer Speicher
Dynamischer Speicher malloc wird in c++ eher nicht mehr verwendet.
Aufgaben zu Rückgabewerten
Bestimmung des Gleitreibungswiderstandes von Ski-Laufflächen
Durchschnitt (verbal)
Referenzen In c kennen wir gewöhnliche Variablen und Pointer.
Matching in Cyberspace - the search behaviour of suppliers and customers in an electronic real estate broker platform David Koch, Gunther Maier Stand:
Hydromechanik- Technische Strömungslehre
Induktive Statistik - Verbindung von Empirie und Theorie
Arrays in C Ein Array ist eine Variable, die aus einer Anzahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Arrays of Objects, a 3 part process
Ohmsches Gesetz, Leistung und Energie
Dt. Immobilientag 2019/Mit Frauen in Führung gehen/Galster-Döring
Pflanzenbau - Bestandsführung
Do’s and Don’ts Wie wird eine (PowerPoint-)Präsentation zum Erfolg?
Arbeitssicherheit und Gesundheitsschutz
Präsidenten- und TK-Konferenz Herzlich Willkommen!
 Präsentation transkript:

ESP Tutorium Studienassistent: Ewald Moitzi Gruppe 1

Finde den Fehler 1 char text[5]; strcpy (text, "hallo"); printf ("%s\n",text); char text[5]; strcpy (text, "hallo"); printf ("%s\n",text); ? Ausgabe:

Finde den Fehler 1 char text[5]; strcpy (text, "hallo"); printf ("%s\n",text); char text[5]; strcpy (text, "hallo"); printf ("%s\n",text); ? Ausgabe: hallo$%§$&45

Finde den Fehler 1 char text[5]; strcpy (text, "hallo"); printf ("%s\n",text); char text[5]; strcpy (text, "hallo"); printf ("%s\n",text); ? Ausgabe: hallo$%§$&45

int check_value = 1; if (check_value == 0); { printf ("in if\n"); } printf ("after if\n"); int check_value = 1; if (check_value == 0); { printf ("in if\n"); } printf ("after if\n"); ? Ausgabe: Finde den Fehler 2

int check_value = 1; if (check_value == 0); { printf ("in if\n"); } printf ("after if\n"); int check_value = 1; if (check_value == 0); { printf ("in if\n"); } printf ("after if\n"); ? Ausgabe: in if after if Finde den Fehler 2

int check_value = 1; if (check_value == 0); { printf ("in if\n"); } printf ("after if\n"); int check_value = 1; if (check_value == 0); { printf ("in if\n"); } printf ("after if\n"); ? Ausgabe: in if after if Finde den Fehler 2

void getNextEven(unsigned int number) { if ((number % 2) == 1) number++; } void getNextEven(unsigned int number) { if ((number % 2) == 1) number++; } Ausgabe: Finde den Fehler 3 int number = 3; getNextEven(number); printf ("%d\n",number); ?

void getNextEven(unsigned int number) { if ((number % 2) == 1) number++; } void getNextEven(unsigned int number) { if ((number % 2) == 1) number++; } Ausgabe: 3 Finde den Fehler 3 int number = 3; getNextEven(number); printf ("%d\n",number); ?

void getNextEven(unsigned int number) { if ((number % 2) == 1) number++; } void getNextEven(unsigned int number) { if ((number % 2) == 1) number++; } Ausgabe: 3 Finde den Fehler 3 unsigned int number = 3; getNextEven(number); printf ("%d\n",number); ?

Finde den Fehler 4 char text[5]; strcpy (text, "hallo"); printf ("%s\n",text); char text[5]; strcpy (text, "hallo"); printf ("%s\n",text); ? Ausgabe:

Finde den Fehler 5 int array[5]; array[5] = 123; printf ("%d\n",array[5]); int array[5]; array[5] = 123; printf ("%d\n",array[5]); ? Ausgabe:

Finde den Fehler 5 int array[5]; array[5] = 123; printf ("%d\n",array[5]); int array[5]; array[5] = 123; printf ("%d\n",array[5]); ? Ausgabe: 123

Finde den Fehler 5 int array[5]; array[5] = 123; printf ("%d\n",array[5]); int array[5]; array[5] = 123; printf ("%d\n",array[5]); ? Ausgabe: 123

Finde den Fehler 6 float number = 1.1; if (number == 1.1) printf ("number == 1.1\n"); else printf ("number != 1.1\n"); float number = 1.1; if (number == 1.1) printf ("number == 1.1\n"); else printf ("number != 1.1\n"); ? Ausgabe:

Finde den Fehler 6 float number = 1.1; if (number == 1.1) printf ("number == 1.1\n"); else printf ("number != 1.1\n"); float number = 1.1; if (number == 1.1) printf ("number == 1.1\n"); else printf ("number != 1.1\n"); ? Ausgabe: number != 1.1

Finde den Fehler 6 float number = 1.1; if (number == 1.1) printf ("number == 1.1\n"); else printf ("number != 1.1\n"); float number = 1.1; if (number == 1.1) printf ("number == 1.1\n"); else printf ("number != 1.1\n"); ? Ausgabe: number != 1.1

Zahlenrepräsentation Zahlensysteme Binär (Basis 2) Octal (Basis 8) (in C z.B. 0123) Dezimal (Basis 10) (in C z.B. 123) Hexadezimal (Basis 16) (in C z.B. 0x123) Hexadezimal 0 – 9 +

Zahlenrepräsentation : Dezimal → Hex Durch Zielbasis dividieren, Rest von rechts nach links anschreiben

Zahlenrepräsentation 0xBEEF : Hex → Dezimal Von rechts nach links: Wert x 16 mit Stelle potenzieren

Dynamischer Speicher #include void *malloc (size_t size); void free (void *base_ptr); void *realloc(void *base_ptr, size_t size);

Dynamischer Speicher - Hinweise Neuer Speicherblock ist uninitialisiert Freigeben nicht vergessen Pointer auf freigegebenen Speicher (Speichermüll!) Nach..alloc() immer auf NULL überprüfen (Speicher voll?) realloc(): tmp pointer verwenden! realloc(): vorsicht in funktionen VALGRIND VERWENDEN!!

Valgrind Bei gcc mit –g kompilieren Aufruf Valgrind Tutorial > valgrind --tool=memcheck --leak-check=yes./name

Mehrdimensionale Arrays Auch mehrdimensionale Arrays liegen sequentiell im Speicher: n.d. 0x2740 0x2744 0x2748 0x274B 0x274F 0x2743 int array[2][2]; array befindet sich an der Speicherstelle 0x2740 Zugriff auf 2. Element der 2. Dimension: array[1][1] oder: *(*(array + 1) + 1) Beide Notationen liefern den Wert an der Stelle 0x274B n.d. array[0][0] array[0][1] array[1][0] array[1][1] array

Finde den Fehler 7 int *pointer; pointer = malloc (10 * sizeof (int)); *pointer = 1; printf ("%d\n", *pointer); int *pointer; pointer = malloc (10 * sizeof (int)); *pointer = 1; printf ("%d\n", *pointer); ? Ausgabe:

Finde den Fehler 7 int *pointer; pointer = malloc (10 * sizeof (int)); *pointer = 1; printf ("%d\n", *pointer); int *pointer; pointer = malloc (10 * sizeof (int)); *pointer = 1; printf ("%d\n", *pointer); ? Ausgabe: Segmentation fault (möglicherweise)

Finde den Fehler 7 int *pointer; pointer = malloc (10 * sizeof (int)); *pointer = 1; printf ("%d\n", *pointer); int *pointer; pointer = malloc (10 * sizeof (int)); *pointer = 1; printf ("%d\n", *pointer); ? Ausgabe: Segmentation fault (möglicherweise)

Finde den Fehler 8 int *pointer; pointer = malloc (10); pointer[9] = 1; printf ("%d\n", pointer[9]); int *pointer; pointer = malloc (10); pointer[9] = 1; printf ("%d\n", pointer[9]); ? Ausgabe:

Finde den Fehler 8 int *pointer; pointer = malloc (10); pointer[9] = 1; printf ("%d\n", pointer[9]); int *pointer; pointer = malloc (10); pointer[9] = 1; printf ("%d\n", pointer[9]); ? Ausgabe: 1

Finde den Fehler 8 int *pointer; pointer = malloc (10); pointer[9] = 1; printf ("%d\n", pointer[9]); int *pointer; pointer = malloc (10); pointer[9] = 1; printf ("%d\n", pointer[9]); ? Ausgabe: 1

Finde den Fehler 9 char *buffer = malloc (16); buffer = realloc (buffer,32); if (buffer == NULL) { free (buffer); } char *buffer = malloc (16); buffer = realloc (buffer,32); if (buffer == NULL) { free (buffer); } ? Ergebnis:

Finde den Fehler 9 char *buffer = malloc (16); buffer = realloc (buffer,32); if (buffer == NULL) { free (buffer); } char *buffer = malloc (16); buffer = realloc (buffer,32); if (buffer == NULL) { free (buffer); } ? Ergebnis: Möglicherweise Speicherloch

Finde den Fehler 9 char *buffer = malloc (16); buffer = realloc (buffer,32); if (buffer == NULL) { free (buffer); } char *buffer = malloc (16); buffer = realloc (buffer,32); if (buffer == NULL) { free (buffer); } ? Ergebnis: Möglicherweise Speicherloch

Finde den Fehler 10 char *argv[2] = {"a.out", "Some" "text"}; int length = strlen(argv[1]); char text[length]; int i; for (i = 0; i < length; i++) text[i] = argv[1][i]; printf("%s\n", text); char *argv[2] = {"a.out", "Some" "text"}; int length = strlen(argv[1]); char text[length]; int i; for (i = 0; i < length; i++) text[i] = argv[1][i]; printf("%s\n", text); ? Ausgabe:

Finde den Fehler 10 char *argv[2] = {"a.out", "Some" "text"}; int length = strlen(argv[1]); char text[length]; int i; for (i = 0; i < length; i++) text[i] = argv[1][i]; printf("%s\n", text); char *argv[2] = {"a.out", "Some" "text"}; int length = strlen(argv[1]); char text[length]; int i; for (i = 0; i < length; i++) text[i] = argv[1][i]; printf("%s\n", text); ? Ausgabe: Some text$&/?=

Finde den Fehler 10 char *argv[2] = {"a.out", "Some" "text"}; int length = strlen(argv[1]); char text[length]; int i; for (i = 0; i < length; i++) text[i] = argv[1][i]; printf("%s\n", text); char *argv[2] = {"a.out", "Some" "text"}; int length = strlen(argv[1]); char text[length]; int i; for (i = 0; i < length; i++) text[i] = argv[1][i]; printf("%s\n", text); ? Ausgabe: Some text$&/?=