C für Fortgeschri/ene 2 Dynamische Speicherverwaltung Programmprüfung und Debugging. Benedikt Huber
|
|
- Heike Frank
- vor 6 Jahren
- Abrufe
Transkript
1 C für Fortgeschri/ene 2 Dynamische Speicherverwaltung Programmprüfung und Debugging Benedikt Huber (benedikt@vmars.tuwien.ac.at) SS
2 Dynamische Speicherverwaltung Christian El Salloum SS
3 Speicherverwaltung in C Stack main () f () printf () Statisch allozierte Variablen Feste Adresse, statisch bekannter Speicherplatzbedarf Am Stack allozierte, lokale Variablen Statisch bekannte Speicherplatzbedarf (ANSI C) Noch nicht betrachtet Speicherplatz dynamischer Größe Dynamisch angeforderter Speicher, dessen Lebensdauer nicht an Anweisungsblöcke gebunden ist Global Dynamic (Heap) Global Static Text (Code)
4 Wiederholung Statisch allozierte Variablen Definition: Außerhalb von Funktionen... oder innerhalb mit Schlüsselwort static Statisch bekannter Speicherplatzbedarf uint8_t dat[8 * sizeof(frame_t)]; static char buf[] = "0x0000"; char *msg = "segfault"; Adresse stets gültig Initialisiert (implizit oder explizit)
5 Wiederholung Lokale Variablen Definition: zu Beginn eines Anweisungsblocks Speicherplatzbedarf statisch bekannt (ANSI C) Ausnahme: Arrays variabler Größe (C99) Ausnahme: Mit alloca() angeforderter Speicher Keine Default-Initialisierung Freigabe des Speichers beim Verlassen des Blocks Adresse verliert Gültigkeit
6 Wiederholung Adressen lokaler Variablen int*f(){ int x=2; int *y = &x; } return y; /* Fehler */ int g() { int *z = f(); }? SP Wert x 2 y Addr(x) z SP Wert?? z Addr(x)
7 Dynamisch angeforderter Speicher Beispiel Einlesen genau einer Zeile einer Textdatei Zeilenlänge prinzipiell unbeschränkt Memory Allocators Anfordern von Speicher beliebiger Größe malloc(3) Freigeben zuvor angeforderten Speichers free(3) Ändern der Größe angeforderten Speichers realloc(3) Betriebssystemunabhängige API Keine automatische Speicherverwaltung
8 Dynamische Speicheranforderung void *malloc(size_t size) Alloziert size bytes zusammenhängenden Speichers Rückgabewert: Startadresse des Speicherbereichs Adresse identifiziert Speicherbereich (free) Beispiele int *x = malloc(sizeof(*x)); int *x = malloc(sizeof(int) * ARRAYSIZE); Speicher nicht initialisiert man 3 calloc
9 Freigabe angeforderten Speichers void free(void* allocatedmemory) free erwartet gültige Adresse von malloc,realloc,etc. zurückgegeben zwischenzeitlich nicht freigegeben Achtung! Nach der Freigabe mittels free darf der Speicherbereich nicht mehr verwendet werden D.h.: Pointer, die in den Speicherbereich zeigen, dürfen nicht mehr dereferenziert werden
10 Ändern der Größe eines Speicherbereichs void* realloc(void* ptr, size_t size) Ändert die Größe des durch ptr identifizierten Speicherbereichs Daten wenn notwendig kopiert, nach realloc ist i.a. zurückgegebener Pointer zu verwenden Achtung Bestehende Pointer auf alte Adresse werden ungültig Im Fehlerfall (NULL retourniert) bleibt alte Adresse gültig
11 Beispiel Beispiel: Einfacher Stack #define BLOCKSIZE 16 typedef struct { unsigned capacity; char *begin; char *top; } cstack_t; void stack_init (cstack_t* s); void stack_push (cstack_t* s, char c); void stack_cleanup (cstack_t* s);
12 Beispiel slot 0 malloc void stack_init (cstack_t* s) { s->capacity = BLOCKSIZE; capacity = 16 s->begin = malloc(blocksize * sizeof(char)); begin top slot 1 slot 2... slot 13 slot 14 slot 15 if(s->begin == NULL) bail( malloc failed ); } s->top = s->begin;
13 Beispiel realloc void stack_push (cstack_t* s, char c) { s->top = s->top + 1; /* Grow stack if neccessary */ slot 0 } *s->top = c; capacity = 16 begin top slot 1 slot 2... slot 13 slot 14 slot 15 s->begin + capacity
14 Beispiel slot 0 realloc s->top = s->top + 1; capacity = 32 begin top slot 1 slot 2... slot 15 slot if(s->top == s->begin + s->capacity) { char *newstack; slot 30 slot 31 s->capacity += BLOCKSIZE; newstack = realloc(s->begin, s->capacity * sizeof(char));
15 Beispiel slot 0 realloc } if(newstack == NULL) { free(s->begin); bail( realloc failed ); } s->top = newstack + (s->top s->begin); s->begin = newstack; capacity = 32 begin top slot 1 slot 2... slot 15 slot slot 30 slot 31
16 Beispiel free void stack_cleanup (cstack_t* s) { if(s->begin!= NULL) { } free(s->begin); } /* Stack MUST not be used anymore! */
17 Bonusmaterial malloc Bibliothek malloc/free Bibliothek (z.b. libc) verwaltet vom Betriebssystem angeforderte Speicherblöcke Online Algorithmus (keine Annahmen über zukünftige Allokationen möglich) Beispiel: Doug Lea s malloc 128 Bins : Schnelle Allokation für kleine Blöcke, Suche für größere Blöcke Meta-Information in Boundary Tag neben dem allozierten Speicherblock 1 Anforderung neuen Speichers mit mmap(2) und sbrk(2) 1 siehe auch: h/p://phrack.org/issues.html?issue=57&id=8
18 Bonusmaterial alloca Dynamische Speicheranforderung am Stack man 3 alloca Auch: Arrays variabler Größe (C99) Vor- und Nachteile Automatische Gültigkeitsdauer + Freigabe Stackallokation häufig performanter Unbekannte / variable maximale Stackgröße Keine Fehlermeldung bei fehlgeschlagener Anforderung (z.b. Segmentation Fault) Nicht ANSI C konform (nicht in Übung)
19 Dynamischer Speicher in C malloc / free: Portabel & Flexibel Aber: Sehr fehleranfällig! Verwenden bereits freigegebenen Speichers Doppelte Freigabe Memory Leak: Speicher wird nicht (rechtzeitig) freigegeben Programmanalyse, Debugging
20 Programmanalyse und Debugging Christian El Salloum SS
21 Programmanalyse und Debugging Statische Analyse (Inspektion des Programms) Am Source Code oder Binärdatei z.b.: -Wall, splint, Model Checking (CBMC) Dynamische Analyse (Automatische Inspektion des Programmablaufs) Instrumentiertes Programm z.b.: valgrind Debugging (manuelle Inspektion des Programmablaufs)
22 Statische Analysetools: splint Analysiert Source Code des Programms Erkennt viele (aber nicht alle) typische Fehler Fehlervorbeugung Warnung bei fehleranfälligen Konstrukten Strengere Typregel Fehlererkennung Verwendung uninitialisierten Speichers Verwendung ungültiger Adressen (NULL)
23 Beispiel Beispielprogramm #include <stdlib.h> #include <stdio.h> int** f() { } int *x = malloc(sizeof(*x)); int **y = malloc(sizeof(*y)); *y = x; *y = NULL; return y; int main(int argc, char**argv) { } if(argc!= 1) return 1; int**mem = f(); if(*mem) free(*mem); free(mem);
24 Beispiel splint Analyse #include <stdlib.h> #include <stdio.h> int** f() { } int *x = malloc(sizeof(*x)); int **y = malloc(sizeof(*y)); *y = x; *y = NULL; return y; int main(int argc, char**argv) { } if(argc!= 1) return 1; int**mem = f(); if(*mem) free(*mem); free(mem); example.c:6:4: Dereference of possibly null pointer y example.c:7:3: Owned storage *y (type int *) not released before assignment: *y = NULL
25 Dynamische Analyse: valgrind Während der Programmausführung werden zusätzliche Informationen gesammelt Qualität hängt daher auch von Testläufen ab Beispiel: valgrind Framework zur Instrumentierung von Programmen Simuliert parallel zum Programm ein Modell zur Fehlererkennung memcheck: valgrind Modul um Fehler in der dynamischen Speicherverwaltung zu finden
26 Beispiel valgrind #include <stdlib.h> #include <stdio.h> int** f() { int *x = malloc(sizeof(*x)); int **y = malloc(sizeof(*y)); *y = x; *y = NULL; return y; } valgrind./example int main(int 4 bytes argc, in char**argv) 1 blocks are { definitely lost if(argc ==1902==!= 1) return at 1; 0x4024F20: malloc int**mem ==1902== = f(); by 0x : f (example.c:4) if(*mem) ==1902== free(*mem); by 0x804846E: main (example.c:11) free(mem); }
27 Beispiel valgrind #include <stdlib.h> #include <stdio.h> int** Achtung: f() { int valgrind *x = malloc(sizeof(*x));./example somearg int **y Kein = Memory malloc(sizeof(*y)); Leak in Testlauf *y = x; Daher Problem nicht erkannt } *y = NULL; return y; int main(int argc, char**argv) { } if(argc!= 1) return 1; int**mem = f(); if(*mem) free(*mem); free(mem);
28 splint&valgrind: Weitere Informationen splint Annotationen Spezielle Kommentare um Treffsicherheit der Analyse zu erhöhen Weitere valgrind Module Helgrind: Fehlererkennung bei Verwendung von Threads Module zur Programmoptimierung Ausprobieren! 1 1 Primer: h/p://wiki.vmars.tuwien.ac.at/
29 Debugging Christian El Salloum SS
30 Debugging Finden und Beheben der Ursache eines bekannten Programmfehlers Manuell Debugnachrichten Zusätzliche Überprüfungen Mit Hilfe eines Debuggers Anhalten und Inspektion des laufenden Prozesses
31 Debugnachrichten Bedingtes Kompilieren gcc g DDEBUG Im Normalfall keine DEBUG Nachrichten #ifdef DEBUG #define DBGMSG(str) do{ \ fprintf(stderr, "%s\n", str) \ } while(0) #else #define DBGMSG(str) /* Do not generate code */ #endif
32 Debugnachrichten: Vordefinierte Makros printf("[%s,%s]%s:%d, in %s(): %s\n", DATE, TIME, FILE, LINE, FUNCTION, My Message"); [Mar , 21:55:31] macros.c:4, in main(): My Message
33 Debugging Tools Am laufenden Prozess Aufgaben des Debuggers: Anhalten des Prozesses an bestimmten Punkten Inspektion des Speichers und der Prozessorregister Manipulation der CPU Register und des Arbeitsspeichers
34 GDB: The GNU Project Debugger Vorbereitung und Starten gcc Option g (Symbole) gdb myprogram Optimierungen verkomplizieren Debugging Eliminierte Variablen Strukturelle Änderungen (z.b. Vertauschen von Schleifen) Achtung: u.u. treten Fehler nur in optimierter Version auf
35 Breakpoints Punkte im Programm, an denen Ausführung unterbrochen werden soll Realisierung in HW (CPU Unterstützung) oder SW (Modifikation des Programmcodes) Spezifikation Adresse des Programmcounters Funktion Zeilennummer (Achtung: Optimierungen!)
36 GDB Basics Ausführen des Programms und Breakpoints break main run file1.txt file2.txt break mycat.c:23 continue next / step nexti/ / stepi until / until mycat.c:24
37 Inspektion des Prozesses print Eingabe Ergebnis print argc $1 = 1 print argv[0] print/x &argc $2 = hello print *((int*)0xbffff2b0) $4 = 1 $3 = 0xbffff2b0 display ~ Ausgabe bei jeder Unterbrechung Modifikation des Speichers mit print p (var = 0)
38 Watchpoints Unterbricht Ausführung wenn sich Variable ändert Realisierung in HW (bis 16 Bytes auf x86) Oder in SW (langsam single stepping) GDB watch myvar Anwendungbereiche Beobachtung einer bestimmten Variable über einen längeren Zeitraum Falls unbekannt, wann sich Variable ändert
39 GDB und Signale Als breakpoint konfigurierbar SIGINT Kontrolle an Debugger Schwerwiegende Fehler: SIGSEGV Signale können selektiv an Programm weitergegeben werden info signals handle SIGUSR1 nostop print pass
40 GDB Demo Sessions Christian El Salloum SS
41 DEMO: Programm /* GDB demo */ void print_avg(char *fn) { int64_t count, sum = 0; char line[linesize]; /* line buffer */ FILE *istream; /* input stream */ } istream = fopen(fn, "r"); while(fgets(line,linesize,istream)!= NULL) { ++count; sum =+ strtol(line,null,10); } printf("avg: %.2f\n",((double)sum)/count);
42 Zusammenfassung Dynamische Speicherverwaltung malloc / free /realloc Fallstricke Fehlersuche Programmanalyse Debugging: GDB Weitere Informationen Webpage von splint, valgrind, gdb
43 ENDE Danke für die Aufmerksamkeit!
Übungen zu Softwaresysteme I Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2004 E-Uebung3.fm
E 3. Übung E 3. Übung Besprechung 1. Aufgabe Aufgabe 3: malloc Debugger gdb E.1 1. Include, Deklarationen #include #include void append_element(int value); int remove_element(void);
MehrDynamische Speicherverwaltung
Dynamische Speicherverwaltung Tim Dobert 17.05.2013 Inhaltsverzeichnis 1 Allgemeines zur Speichernutzung 2 2 Ziel und Nutzen 2 3 Anwendung in C 2 3.1 malloc............................... 3 3.2 calloc...............................
MehrÜbungen zu Systemprogrammierung 1 (SP1)
Übungen zu Systemprogrammierung 1 (SP1) B1 Debugging Jens Schedel, Christoph Erhardt, Jürgen Kleinöder Lehrstuhl für Informatik 4 Verteilte Systeme und Betriebssysteme 03-B1_handout Friedrich-Alexander-Universität
MehrÜbungspaket 29 Dynamische Speicherverwaltung: malloc() und free()
Übungspaket 29 Dynamische Speicherverwaltung malloc() und free() Übungsziele Skript In diesem Übungspaket üben wir das dynamische Alloziieren 1. und Freigeben von Speicherbereichen 2. von Zeichenketten
MehrTypische Speicherfehler in C
Typische Speicherfehler in C Thorsten Ploß Informatik Universität Hamburg Proseminar: C-Grundlagen und Konzepte 17.05.2013 1 / 13 Inhaltsverzeichnis Einleitung Klassische Speicherverwaltung - Fehlerquellen
MehrDynamischer Speicher
Dynamischer Speicher C-Kurs 2012, 3. Vorlesung Tino Kutschbach tino.kutschbach@campus.tu-berlin.de http://wiki.freitagsrunde.org 13. September 2012 This work is licensed under the Creative Commons Attribution-ShareAlike
MehrEffizientes Memory Debugging in C/C++
Effizientes Memory Debugging in C/C++ Adam Szalkowski Embedded Computing Conference 2014 Ursachen/ Symptome Debugging Tools Ursachen / Symptome Was habe ich falsch gemacht? Was kann denn passieren im schlimmsten
MehrAdvanced Programming in C
Advanced Programming in C Pointer und Listen Institut für Numerische Simulation Rheinische Friedrich-Wilhelms-Universität Bonn Oktober 2013 Überblick 1 Variablen vs. Pointer - Statischer und dynamischer
MehrDr. Monika Meiler. Inhalt
Inhalt 11 Dynamische Feldvereinbarung... 11-2 11.1 Dynamische Vereinbarung von Vektoren... 11-3 11.2 Dynamische Vereinbarung von Matrizen... 11-5 11.3 Die Kommandozeile... 11-8 Propädeutikum 11-1/8 11
Mehrhttp://www.stud.uni-potsdam.de/~hoeffi/gdb.html#wozu
gdb: debugging code In der Vorlesung hatte ich Teile von http://www.stud.uni-potsdam.de/~hoeffi/gdb.html#wozu und ein eigenes Beispiel diskutiert. Ein Debugger soll helfen Fehler im Programm, die sich
MehrProgrammierung mit C Speicherverwaltung
Programmierung mit C Speicherverwaltung Wo werden Daten im Speicher abgelegt? Programmcode Programmsegment Globale Daten Statische Daten Datensegment Lokale Daten Funktionsaufrufe Stack Frei verfügbar
MehrÜbung zu Grundlagen der Betriebssysteme. 3. Übung 30.10.2012
Übung zu Grundlagen der Betriebssysteme 3. Übung 30.10.2012 Aufgabe 1 Schließen Sie sich über die URL http://userpages.uni-koblenz.de/~mips/bs/anmeldung/ Bearbeitungsgruppen bestehend aus 3 Teilnehmern
MehrProgrammieren in C Signale, Bitfelder, Unionen Fehler, Debugging, Profiling
Programmieren in C Signale, Bitfelder, Unionen Fehler, Debugging, Profiling Hochschule Fulda FB AI Wintersemester 2014/15 http://c-ai.rz.hs-fulda.de Peter Klingebiel, HS Fulda, DVZ Signale 1 Signal Systemnachricht
MehrEinführung in die C-Programmierung
Einführung in die C-Programmierung Warum C? Sehr stark verbreitet (Praxisnähe) Höhere Programmiersprache Objektorientierte Erweiterung: C++ Aber auch hardwarenahe Programmierung möglich (z.b. Mikrokontroller).
MehrEarly first draft Höllische Programmiersprachen Seminar im WS 2014/15 Speichermanagement
Early first draft Höllische Programmiersprachen Seminar im WS 2014/15 Speichermanagement Max Haslbeck Technische Universität München 20.01.2015 Zusammenfassung 1 Einleitung 2 Begriffsklärung Heutzutage
MehrEinleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens
Grundlagen von C Jonas Gresens Proseminar C Grundlagen und Konzepte Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität
MehrInteger Integer Integer (Voreinstellung) Integer Gleitkomma Gleitkomma leer/unbestimmt Integer ohne Vorzeichen Integer (explizit) mit Vorzeichen
1 C-Schlüsselwörter Schlüsselwörter sind in allen Programmiersprachen reservierte Wörter. In C sind auch alle Namen _[A-Z]... und... reserviert, auch _... bereichsweise. Weiterhin durch die Standard-
MehrErste Schritte der Programmierung in C
Erste Schritte der Programmierung in C C versus C++ Anatomie von C-Programmen für AVR- Mikrocontroller Unterschiede zwischen C++ und C 1 Grundlegende Unterschiede File-Extensions (Header und Quellcode)
MehrLehrstuhl für Datenverarbeitung. Technische Universität München. Grundkurs C++ Dokumentation mit Doxygen
Grundkurs C++ Dokumentation mit Doxygen Doxygen Überblick Grundkurs C++ 2 Doxygen doxygen g Erzeugt Doxyfile Konfigurationsdatei Kann mit Texteditor bearbeitet werden. doxygen Doxyfile Erzeugt Dokumentation
MehrTafelübung zu BS 4. Speicherverwaltung
Tafelübung zu BS 4. Speicherverwaltung Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/~os/ http://ess.cs.tu-dortmund.de/de/teaching/ss2014/bs/
MehrC allgemein. C wurde unter und für Unix entwickelt. Vorläufer sind BCPL und B.
C-Crash-Kurs Eine kurze, keinesfalls erschöpfende Einführung in die Sprache C für Studierende, die eine strukturierte imperative Programmiersprache beherrschen. Die Vorstellung erfolgt am Beispiel von
MehrDeklarationen in C. Prof. Dr. Margarita Esponda
Deklarationen in C 1 Deklarationen Deklarationen spielen eine zentrale Rolle in der C-Programmiersprache. Deklarationen Variablen Funktionen Die Deklarationen von Variablen und Funktionen haben viele Gemeinsamkeiten.
MehrGCC 3.x Stack Layout. Auswirkungen auf Stack-basierte Exploit-Techniken. Tobias Klein, 2003 tk@trapkit.de Version 1.0
1 GCC 3.x Stack Layout Auswirkungen auf Stack-basierte Exploit-Techniken Tobias Klein, 2003 tk@trapkit.de Version 1.0 2 Abstract Eine spezielle Eigenschaft des GNU C Compilers (GCC) der Version 3.x wirkt
MehrRO-Tutorien 3 / 6 / 12
RO-Tutorien 3 / 6 / 12 Tutorien zur Vorlesung Rechnerorganisation Christian A. Mandery WOCHE 2 AM 06./07.05.2013 KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft
MehrPropädeutikum. Dipl.-Inf. Frank Güttler
Propädeutikum 2015 Vorbereitungskurs Informatikstudium Erfolgreich Studieren Programmieren (C-Kurs) guettler@informatik.uni-leipzig.de Universität Leipzig Institut für Informatik Technische Informatik
Mehr2Binden 3. und Bibliotheken
3 Vom C-Programm zum laufenden Prozess 3.1 Übersetzen - Objektmodule 1Übersetzen 3. - Objektmodule (2) Teil III 3Vom C-Programm zum laufenden Prozess 2. Schritt: Compilieren übersetzt C-Code in Assembler
MehrÜbersicht. Einführung in die Programmierung. main. main. main. main. Speicherverwaltung. Definition nach ANSI C:
Übersicht Einführung in die Programmierung Bachelor of Science die -Funktion Prof. Dr. Rethmann Fachbereich Elektrotechnik und Informatik Hochschule Niederrhein WS 009/0 Einführung in die Programmierung
MehrGrundlagen. Die Komponenten eines C Programms. Das erste Programm
Grundlagen 1. Die Komponenten eines C Programms 2. Ein Programm erzeugen und übersetzen 3. Variablen Deklarieren und Werte zuweisen 4. Zahlen eingeben mit der Tastatur 5. Arithmetische Ausdrücke und Berechnungen
MehrEinführung in den Einsatz von Objekt-Orientierung mit C++ I
Einführung in den Einsatz von Objekt-Orientierung mit C++ I ADV-Seminar Leiter: Mag. Michael Hahsler Syntax von C++ Grundlagen Übersetzung Formale Syntaxüberprüfung Ausgabe/Eingabe Funktion main() Variablen
MehrPROGRAMMIEREN MIT C. }, wird kompiliert mit dem Befehl. (-o steht für output) und ausgeführt mit dem Befehl
PROGRAMMIEREN MIT C Allgemeine hinweise Alles was hier beschrieben wird, soll auch ausprobiert werden. Warum C? Weil die coolen Dinge mit C am einfachsten gehen. Das werden wir in den folgenden Übungen
MehrTutorium Rechnerorganisation
Woche 2 Tutorien 3 und 4 zur Vorlesung Rechnerorganisation 1 Christian A. Mandery: KIT Universität des Landes Baden-Württemberg und nationales Grossforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu
MehrModerne C-Programmierung
Xpert.press Moderne C-Programmierung Kompendium und Referenz Bearbeitet von Helmut Schellong 1. Auflage 2005. Buch. xii, 280 S. ISBN 978 3 540 23785 3 Format (B x L): 15,5 x 23,5 cm Weitere Fachgebiete
Mehr6 Speicherorganisation
Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen Speicherbereich für
MehrZusammenfassung des Handzettels für Programmieren in C
Zusammenfassung des Handzettels für Programmieren in C In der handschriftlichen Kopie werden mehr Abkürzungen verwendet. Alles Grün markierte dient zum lernen und wird nicht auf den Handzettel übertragen.
MehrGI Vektoren
Vektoren Problem: Beispiel: viele Variablen vom gleichen Typ abspeichern Text ( = viele char-variablen), Ergebnisse einer Meßreihe ( = viele int-variablen) hierfür: Vektoren ( = Arrays = Feld ) = Ansammlung
MehrComputergrundlagen Programmieren in C
Computergrundlagen Programmieren in C Axel Arnold Institut für Computerphysik Universität Stuttgart Wintersemester 2013/14 Die Sprache C D. M. Ritchie, 1941 2011 Entwickelt 1971-1973 aktueller Standard:
MehrÜbung zur Vorlesung Programmieren in C
Übung zur Vorlesung Programmieren in C 6 Pointers Marvin Gülker Ruhruniversität Bochum Wintersemester 2015/2016 Marvin Gülker (Ruhruniversität Bochum) 6 Pointers Wintersemester 2015/2016 1 / 29 Gliederung
MehrComputergrundlagen Programmieren in C
Die Compilersprache C Computergrundlagen Programmieren in C Axel Arnold Institut für Computerphysik Universität Stuttgart Wintersemester 2010/11 Geschichte D. M. Ritchie, *1941 1971-73: Entwickelt von
MehrAssembler - Einleitung
Assembler - Einleitung Dr.-Ing. Volkmar Sieh Department Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2008 Assembler - Einleitung 1/19 2008-04-01 Teil 1: Hochsprache
MehrEinige Grundlagen zu OpenMP
Einige Grundlagen zu OpenMP Stephanie Friedhoff, Martin Lanser Mathematisches Institut Universität zu Köln 22. Juni 2016 Überblick Was ist OpenMP? Basics Das OpenMP fork-join-modell Kompilieren und Ausführen
MehrKlausur C-Programmierung / 15.02.2014 / Klingebiel / 60 Minuten / 60 Punkte
Klausur C-Programmierung / 15.02.2014 / Klingebiel / 60 Minuten / 60 Punkte Musterlösung 1. Aufgabe (5 Punkte) Im folgenden Programmcode sind einige Fehler enthalten. Finden und markieren Sie mindestens
MehrObjektbasierte Entwicklung
Embedded Software Objektbasierte Entwicklung Objektorientierung in C? Prof. Dr. Nikolaus Wulff Objektbasiert entwickeln Ohne C++ wird meist C im alten Stil programmiert. => Ein endlose while-schleife mit
MehrNachname:... Vorname:... MatrNr.:... Klausur PR2. Erstellen Sie eine Struktur für eine Komplexe Zahl mit den Elementen real und imag vom Typ double.
Nachname:... Vorname:... MatrNr.:... Klausur PR2 HAW-Hamburg, Fakultät Technik und Informatik, Department Informations- und Elektrotechnik Dr. Robert Heß, 4.7.2008 Bearbeitungsdauer: 90 min Hilfsmittel:
MehrInformatik I (D-MAVT)
Informatik I (D-MAVT) Übungsstunde 1 simon.mayer@inf.ethz.ch Distributed Systems Group, ETH Zürich kurze Stunden mit Stoffueberblick -> mehr Zeit fuer Fragen This semester s menu... Imperative Programmierung
MehrInhaltsverzeichnis. Grundbegriffe der C-Programmierung Für den HI-TECH C-Compiler
Inhaltsverzeichnis Grundbegriffe der C-Programmierung 1. Grundsätzliches... 2 1.1 Darstellung von Werten... 2 1.1.1 Dezimale Zahlendarstellung... 2 1.1.2 Binäre Zahlendarstellung... 3 1.1.3 Hexadezimale
MehrC für Java-Programmierer
Carsten Vogt C für Java-Programmierer ISBN-10: 3-446-40797-9 ISBN-13: 978-3-446-40797-8 Inhaltsverzeichnis Weitere Informationen oder Bestellungen unter http://www.hanser.de/978-3-446-40797-8 sowie im
MehrGrundlagen der Programmiersprache C für Studierende der Naturwissenschaften
Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften Teil 10: Eigene Bibliotheken Patrick Schreier Abteilung für Angewandte Mathematik Vorlesung vom 14. Juli 2014 Gliederung eigene
MehrÜbungen zur Vorlesung Systemsicherheit
Übungen zur Vorlesung Systemsicherheit Address Space Layout Randomization Tilo Müller, Reinhard Tartler, Michael Gernoth Lehrstuhl Informatik 1 + 4 19. Januar 2011 c (Lehrstuhl Informatik 1 + 4) Übungen
MehrDLLs (dynamic loaded libraries) mit MingW erstellen
DLLs (dynamic loaded libraries) mit MingW erstellen Autor: Michel D. Schmid Datum: April 2, 2009 Contents 1 Einführung 1 1.1 Open-Source Tools.......................................... 1 2 Beispiel 1:
MehrZeichendarstellung. Zeichen sind Zahlen (in C) Zeichen und switch
darstellung Arbeiten mit darstellung werden im Computer durch (kleine) Zahlen dargestellt in C können im Datentyp char gespeichert werden, dieser umfasst ein Byte und gilt als Ganzzahltyp darstellung Arbeiten
MehrModellierung und Programmierung
Modellierung und Programmierung Dr. Martin Riplinger 19.12.2012 IAM Institut für Angewandte Mathematik Funktionszeiger: Vorüberlegungen Funktionsaufrufe sind bis jetzt im Code mit Name explizit angegeben
MehrSchachtelung der 2. Variante (Bedingungs-Kaskade): if (B1) A1 else if (B2) A2 else if (B3) A3 else if (B4) A4 else A
2.4.6. Kontrollstrukturen if-anweisung: Bedingte Ausführung (Verzweigung) 2 Varianten: if (Bedingung) Anweisung (Anweisung = einzelne Anweisung oder Block) Bedeutung: die Anweisung wird nur ausgeführt,
MehrFehlererkennung. C - Kurs September This work is licensed under a Creative Commons AttributionNonComercialShareAlike 3.0 License.
Fehlererkennung C - Kurs 2012 13. September 2012 This work is licensed under a Creative Commons AttributionNonComercialShareAlike 3.0 License. 1 / 80 Inhaltsverzeichnis 1 Fehlerarten Syntaxfehler Logikfehler
MehrÜbungspaket 23 Mehrdimensionale Arrays
Übungspaket 23 Mehrdimensionale Arrays Übungsziele: Skript: Deklaration und Verwendung mehrdimensionaler Arrays Kapitel: 49 Semester: Wintersemester 2016/17 Betreuer: Kevin, Matthias, Thomas und Ralf Synopsis:
MehrC/C++ Debugging mit CDT unter Eclipse
C/C++ Debugging mit CDT unter Eclipse Bevor Sie mit dem Debuggen beginnen können, müssen Sie eine compilierbare Applikation erstellen, also eine Applikation, die keine Syntaxfehler mehr enthält. Sie können
MehrEinführung in die Programmiersprache C
Einführung in die Programmiersprache C Marcel Arndt arndt@ins.uni-bonn.de Institut für Numerische Simulation Universität Bonn Der Anfang Ein einfaches Programm, das Hello World! ausgibt: #include
MehrProgrammieren in C. Die C-Standardbibliothek. Prof. Dr. Nikolaus Wulff
Programmieren in C Die C-Standardbibliothek Prof. Dr. Nikolaus Wulff Die C-Standard Bibliothek Mit dem C Compiler werden viel fertige Bibliotheksfunktionen ausgeliefert. Eine genaue Kenntnis dieser Funktionen
MehrKlausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 13. April 2007, 11.15-13.00 Uhr Bearbeitungszeit: 105 Minuten
Klausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 13. April 2007, 11.15-13.00 Uhr Bearbeitungszeit: 105 Minuten Vorname: Nachname: Matrikelnummer: Legen Sie zu Beginn Ihren Studentenausweis
MehrC++ - Einführung in die Programmiersprache Funktionen. Leibniz Universität IT Services Anja Aue
C++ - Einführung in die Programmiersprache Funktionen Leibniz Universität IT Services Anja Aue Subroutine (Unterprogramm) Lösung von Teilen einer Gesamtaufgabe. Kapselung von Anweisungen, die zu einer
MehrMicrocontroller Praktikum SS2010 Dipl. Ing. R. Reisch
Microcontroller Praktikum SS2010 Dipl. Ing. R. Reisch Die wichtigsten Unterlagen/Tools Für das Praktikum Unterlagen/Kenntnisse/Tools wichtig: Datenblatt des AT80USB1287 µc Schaltplan des im Praktikum verwendeten
MehrFakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012
WS 2011/2012 Fakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012 Prof. Dr. Robert Lorenz Musterlösung zur Vorlesung Informatik I, Extrablatt zu komplexen Datenstrukturen Aufgabe 45 **
MehrDAP2-Programmierpraktikum Einführung in C++ (Teil 1)
DAP2-Programmierpraktikum Einführung in C++ (Teil 1) Carsten Gutwenger 11. April 2008 Lehrstuhl 11 Algorithm Engineering Fakultät für Informatik, TU Dortmund Überblick Mein erstes C++-Programm Namensräume
MehrFunktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:
Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Der Sourcecode wird an den entsprechenden Stellen im Programm wiederholt Programm wird lang
Mehr1.4. Funktionen. Objektorientierte Programmierung mit C++
mehrfache Deklarationen sind erlaubt für jede Funktion muss es (GENAU) eine Definition geben, ansonsten linker error [the one definition rule ODR] Deklarationen in *.h - Files, Definitionen in *.cpp -
MehrÜbung zu Grundlagen der Betriebssysteme. 13. Übung 22.01.2012
Übung zu Grundlagen der Betriebssysteme 13. Übung 22.01.2012 Aufgabe 1 Fragmentierung Erläutern Sie den Unterschied zwischen interner und externer Fragmentierung! Als interne Fragmentierung oder Verschnitt
MehrBeispiel 2a Die eigenen ersten Schritte mit dem Gnu-Debugger GDB für Remote-Debugging
Beispiel 2a Die eigenen ersten Schritte mit dem Gnu-Debugger GDB für Remote-Debugging Das Beispiel orientiert sich am selben Code, der im Teil 1 der Serie verwendet wurde. Text Styles: Shell Prompt mit
MehrC- Kurs 04 Anweisungen
C- Kurs 04 Anweisungen Dipl.- Inf. Jörn Hoffmann jhoffmann@informa@k.uni- leipzig.de Universität Leipzig Ins@tut für Informa@k Technische Informa@k Ausdrücke Institut für Informatik Anweisungen C-Programm
MehrProgrammiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm
Programmiersprachen Einführung in C Teil 2: Prof. Dr. int main (int argc, char *argv[]) int sum = 0; for (i = 0; i
MehrEinführung in die Programmierung Wintersemester 2011/12
Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : Kontrollstrukturen Inhalt Wiederholungen - while
MehrMalware. Carlo U. Nicola 09. Dezember Die Struktur eines (harmlosen) aber echten Virus-Programmes analysieren;
FHNW: Labor Netzwerkssicherheit Malware Carlo U. Nicola 09. Dezember 2012 Ziel Die Ziele dieser Aufgabe sind: 1. Anhand der printf(...) C-Funktion erkennen, dass die (Un)-Sicherheit bereits implizit in
MehrS. d. I.: Programieren in C Folie 4-1. im Gegensatz zu Pascal gibt es in C kein Schlüsselwort "then"
S. d. I.: Programieren in C Folie 4-1 4 Anweisungen 4.1 if-anweisung 1) if (Ausdruck) 2) if (Ausdruck) } else im Gegensatz zu Pascal gibt es in C kein Schlüsselwort "then" es wird nur der numerische Wert
MehrLösungsvorschlag zur 9. Übung
Prof. Frederik Armknecht Sascha Müller Daniel Mäurer Grundlagen der Informatik 3 Wintersemester 09/10 Lösungsvorschlag zur 9. Übung 1 Präsenzübungen 1.1 Schnelltest a) Welche der folgenden Aussagen über
MehrWelche Informatik-Kenntnisse bringen Sie mit?
Welche Informatik-Kenntnisse bringen Sie mit? So gehen Sie vor! Lösen Sie die Aufgaben der Reihe nach von 1 bis 20, ohne das Lösungsblatt zur Hilfe zu nehmen. Der Schwierigkeitsgrad der Aufgaben nimmt
MehrÜbungspaket 31 Entwicklung eines einfachen Kellerspeiches (Stacks)
Übungspaket 31 Entwicklung eines einfachen Kellerspeiches (Stacks) Übungsziele: Skript: 1. Definieren einer dynamischen Datenstruktur 2. Dynamische Speicher Speicherallokation 3. Implementierung eines
MehrSichere Programmierung in C 296
Sichere Programmierung in C 296 Systemnahe Software ist in vielen Fällen in Besitz von Privilegien und gleichzeitig im Kontakt mit potentiell gefährlichen Nutzern, denen diese Privilegien nicht zustehen.
MehrÜbungen zur Vorlesung EidP (WS 2015/16) Blatt 6
Andre Droschinsky Ingo Schulz Dortmund, den 0. Dezember 2015 Übungen zur Vorlesung EidP (WS 2015/16) Blatt 6 Block rot Es können 4 + 1 Punkte erreicht werden. Abgabedatum: 10. Dezember 2015 2:59 Uhr Hinweise
MehrSichere Programmierung in C
Sichere Programmierung in C Systemnahe Software ist in vielen Fällen in Besitz von Privilegien und gleichzeitig im Kontakt mit potentiell gefährlichen Nutzern, denen diese Privilegien nicht zustehen. Daher
MehrHello world. Sebastian Dyroff. 21. September 2009
Hello world Sebastian Dyroff 21. September 2009 1 / 35 Inhaltsverzeichnis Organisatorisches Hello World Typen und Operatoren Programmfluss Weitere Konstrukte Nützliche Tipps 2 / 35 Inhalte dieser Veranstaltung
MehrProgrammierung 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
MehrDienstspezifikation nach RFC 2396 193
Dienstspezifikation nach RFC 2396 193 Für die Kombination aus Rechnernamen (oder alternativ einer IP-Adresse) und einer Portnummer gibt es mit RFC 2396 einen Standard: hostport host [ : port ] host hostname
MehrC programmieren. Jürgen Wolf
C programmieren Jürgen Wolf Vorwort 11 Kapitel 1: Schnelleinstieg 13 Was sollten Sie bereits können? 14 Was lernen Sie mit diesem Buch? 14 Was benötigen Sie noch? 14 Überblick zu den einzelnen Kapiteln
MehrPThreads. Pthreads. Jeder Hersteller hatte eine eigene Implementierung von Threads oder light weight processes
PThreads Prozesse und Threads Ein Unix-Prozess hat IDs (process,user,group) Umgebungsvariablen Verzeichnis Programmcode Register, Stack, Heap Dateideskriptoren, Signale message queues, pipes, shared memory
MehrTHE GO PROGRAMMING LANGUAGE. Michael Karnutsch & Marko Sulejic
THE GO PROGRAMMING LANGUAGE Part 1: Michael Karnutsch & Marko Sulejic Gliederung Geschichte / Motivation Compiler Formatierung, Semikolons Variablen, eigene Typen Kontrollstrukturen Funktionen, Methoden
Mehr(allgemeine) OOP in C++ Klassen und header-files Konstruktorn / Destruktoren Speicherverwaltung C++ Standard Library / SLT
Architektur Übersicht (allgemeine) OOP in C++ Polymorphie Virtuelle Funktionen Kompilieren Linken dynamische/statische Bibliotheken Tutorial: vs2008+ogre+(campus modell) Architektur (allgemeine) OOP in
MehrNetzwerksicherheit Musterlösung Übungsblatt 4: Viren
Institut für Informatik Alina Barendt und Philipp Hagemeister Netzwerksicherheit Musterlösung Übungsblatt 4: Viren 1 Vorbereitung msg db "Virus" mov ah, 40h mov bx, 1 mov cx, $5 mov dx, msg int 21h ; Write
MehrWas ist Reference Counting Implementierung. Ende. Reference Counting. Kevin Köster. Uni Hamburg. 31. März Kevin Köster Reference Counting 1/58
Reference Counting Kevin Köster Uni Hamburg 31. März 2013 Kevin Köster Reference Counting 1/58 Kevin Köster Reference Counting 2/58 Beschreibung Dateisystem Praxis Frage Wann wissen wir, ob ein Objekt
Mehr225. gdb der Gnu Debugger
225. gdb der Gnu Debugger Debuggen Oftmals enthält ein Programm einen Fehler, und man findet den Fehler nicht sofort. Eine Möglichkeit besteht aus vielen printf-anweisungen in dem Quelltext. Eleganter
MehrNachname: Vorname: Matr.-Nr.: Punkte: 1. Aufgabe: ( / 25 Pkt.) Gegeben ist das folgende Struktogramm zur Berechnung von sin(x) mit Hilfe einer Reihe.
Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe: ( / 25 Pkt.) Gegeben ist das folgende
MehrDer Goopax Compiler GPU-Programmierung in C++ ZKI AK-Supercomputing, Münster, 27.03.2014, Ingo Josopait
Der Goopax Compiler GPU-Programmierung in C++ AMD R9 290X: 5.6 TFLOPS (SP MulAdd) Programmierung ~10000 Threads Entwicklungsumgebungen Entwicklungsumgebungen CUDA, OpenCL Compiler: kernel GPU Maschinencode
MehrHochschule Ravensburg-Weingarten Schriftliche Prüfung Programmieren Prof. Dr. M. Zeller
Hochschule Ravensburg-Weingarten Schriftliche Prüfung Programmieren Prof. Dr. M. Zeller Datum, Zeit, 08:00 09:30 Uhr (90 min) Aufgabenblätter 14 Seiten (einschl. Deckblatt) erreichbare Punktzahl 54 zugelassene
MehrDie 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
Mehr9 Zeiger (Pointer). Dynamischer Speicher
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: http://www.j3l7h.de/videos.html
MehrEinleitung. Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Kurzeinführung in C/C++
Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ 1 Einleitung Vorteile von Java: gut strukturiert mit hohem Funktionsumfang (mächtige Standardbibliothek) weitestgehend
MehrInformatik I. Übung 2 : Programmieren in Eclipse. 5. März Daniel Hentzen
Informatik I Übung 2 : Programmieren in Eclipse 5. März 2014 Daniel Hentzen dhentzen@student.ethz.ch Downloads : http://n.ethz.ch/~dhentzen/download/ Heute 1. Nachbesprechung Übung 1 2. Theorie 3. Vorbesprechung
Mehr1Schnelleinstieg 14. 2Wie aus einer einfachen Textdatei. 3 Wie man eigene Programme erstellt 30. Inhaltsverzeichnis. ein Programm wird 20
Inhaltsverzeichnis Liebe Leserin, lieber Leser!...13 1Schnelleinstieg 14 Welche Vorkenntnisse benötigen Sie für dieses Buch?...16 An wen richtet sich dieses Buch?...16 Was benötigen Sie, um die Programmiersprache
MehrPrimitive Datentypen
Primitive Datentypen 2 Arten von Datentypen: primitive Datentypen (heute) Objekte (später) Java ist streng typisiert, d.h. für jede Variable muß angegeben werden was für eine Art von Wert sie aufnimmt.
MehrProgrammieren in C. Operatoren, Variablen und deren Sichtbarkeit. Prof. Dr. Nikolaus Wulff
Programmieren in C Operatoren, Variablen und deren Sichtbarkeit Prof. Dr. Nikolaus Wulff Auswertung von Ausdrücken Was passiert wenn ein Ausdruck wie z. B. int y,x=2; y = ++x * x++; im Computer abgearbeitet
MehrWerkzeuge zur Programmentwicklung
Werkzeuge zur Programmentwicklung B-15 Bibliothek Modulschnittstellen vorübersetzte Module Eingabe Editor Übersetzer (Compiler) Binder (Linker) Rechner mit Systemsoftware Quellmodul (Source) Zielmodul
MehrLösung Übungszettel 6
Lösungen zur Vorlesung GRUNDLAGEN DER INFORMATIK I Studiengang Elektrotechnik SS 03 AG Betriebssysteme FB3 Kirsten Berkenkötter Lösung Übungszettel 6 1 Aufgabe 1: Parallel-Server 1.1 Client #include
MehrSpeicher und Adressraum
Linearer Speicher (Adressraum) Technische Universität München Speicher und Adressraum Freie Speicherhalde (Heap) Freier Speicherstapel (Stack) Globale Variablen Bibliotheksfunktionen Laufzeitsystem Programmcode
Mehr