Allgemein Nutzung Call-by-Value / Call-by-Reference Struct Typen Typische Fehler. Umgang mit Pointern. Seminar Effiziente Programmierung

Similar documents
TIn 1: Lecture 3: Lernziele. Lecture 3 The Belly of the Architect. Basic internal components of the Pointers and data storage in memory

Open Text Social Media. Actual Status, Strategy and Roadmap

SPICE auf der Überholspur. Vergleich von ISO (TR) und Automotive SPICE

How To Teach A Software Engineer

SAP GLOBAL DIVERSITY POLICY

Search Engines Chapter 2 Architecture Felix Naumann

SAP Sourcing/CLM Webcast Query & User/Contact Maintenance Web Service

Designing and Implementing a Server Infrastructure MOC 20413

SAP Solution Manager Change Request Management. SAP Solution Manager Product Management SAP AG

AnyWeb AG

Timebox Planning View der agile Ansatz für die visuelle Planung von System Engineering Projekt Portfolios

Run SAP Implementation Partner Program Guide 2009 ADOPTING THE RUN METHODOLOGY INTO YOUR SAP IMPLEMENTATIONS

Implementing Data Models and Reports with Microsoft SQL Server

Mit einem Auge auf den mathema/schen Horizont: Was der Lehrer braucht für die Zukun= seiner Schüler

PBS CBW NLS IQ Enterprise Content Store

NATIVE ADVERTISING, CONTENT MARKETING & CO. AUFBRUCH IN EIN NEUES GOLDENES ZEITALTER DES MARKETINGS?

Developments in the Austrian Surveying Education

Marc Grote. OCSP / CRL Schlüssel Archivierung CA-Konsole Certutil PKI Health

Kapitel 2 Unternehmensarchitektur III

Zielgruppe Dieses Training eignet sich für IT-Professionals.

Kap. 2. Transport - Schicht

Upgrading Your Skills to MCSA Windows Server 2012 MOC 20417

1Copyright 2013, Oracle and/or its affiliates. All rights reserved.

Die SharePoint-Welt für den erfahrenen.net- Entwickler. Fabian Moritz MVP Office SharePoint Server

IAC-BOX Network Integration. IAC-BOX Network Integration IACBOX.COM. Version English

Vergleich der Versionen von Kapitel 1 des EU-GMP-Leitfaden (Oktober 2012) 01 July November Januar 2013 Kommentar Maas & Peither

Berufsakademie Mannheim University of Co-operative Education Department of Information Technology (International)

Welcome Unveiling the Results of the First Comprehensive Study on Structured Products in Switzerland

Microsoft Nano Server «Tuva» Rinon Belegu

Kurz-Einführung Python

LEHMAN BROTHERS SECURITIES N.V. LEHMAN BROTHERS (LUXEMBOURG) EQUITY FINANCE S.A.

Semantic Web. Semantic Web: Resource Description Framework (RDF) cont. Resource Description Framework (RDF) W3C Definition:

Customer Surveys with SAP Contact Center

Voraussetzungen/ Prerequisites *for English see below*

Das Verb to be im Präsens

SAP CRM Detailed View SAP CRM Web Service Tool

Deutsche Nachwuchswissenschaftler in den USA

Building an Architecture Model Entwerfen Sie mit AxiomSys ein Kontextdiagramm, das folgendermaßen aussieht:

Toward a sociology of risk : using disaster research to understand group and organizational behavior toward technological risk Neal, David M.

J2EE-Application Server

GCE EXAMINERS' REPORTS

MUK-IT 63. Roundtable. Herzlich Willkommen bei der Software AG. Anton Hofmeier VP Sales Terracotta DACH / MdGL

Mark Scheme. German GERM1. (Specification 2660) Unit 1: Listening, Reading and Writing. General Certificate of Education (A-level) June 2011

APPLICATION SETUP DOCUMENT

LEARNING AGREEMENT FOR STUDIES

I-Q SCHACHT & KOLLEGEN QUALITÄTSKONSTRUKTION GMBH ISO 26262:2011. Liste der Work Products aus der Norm

HYPO TIROL BANK AG. EUR 5,750,000,000 Debt Issuance Programme (the "Programme")

Heterogeneous ABAP System Copy Technical Overview

DATA is just like CRUDE. It s valuable, but if unrefined it cannot really be used.

Vorläufiges English Programme im akademischen Jahr 2015/2016 Preliminary English Programme in the Academic Year 2015/2016 *for English see below*

SHA CAN Realtime Core Documentation

Vorläufiges English Programme im akademischen Jahr 2015/2016 Preliminary English Programme in the Academic Year 2015/2016 *for English see below*

Technische Alternative elektronische Steuerungsgerätegesellschaft mbh. A-3872 Amaliendorf, Langestr. 124 Tel +43 (0)

RFC's und Internet- Drafts mit URN-Bezug in Zusammenhang mit der Definition von Namen. Nik Klever FB Informatik - FH Augsburg klever@fh-augsburg.

Windows Server und Windows Vista-Gruppenrichtlinien

Die Versant-DB ist ein wesentlicher Bestandteil von CADISON.

BP9 - Citrix Receiver Optimierung: So verbessern Sie Management und Benutzerkomfort. Systems Engineer, Citrix Systems GmbH

It is also possible to combine courses from the English and the German programme, which is of course available for everyone!

Exchange Synchronization AX 2012

Erfolgreiche Zusammenarbeit:

SAP Product Road Map SAP Mobile Documents

LINGUISTIC SUPPORT IN "THESIS WRITER": CORPUS-BASED ACADEMIC PHRASEOLOGY IN ENGLISH AND GERMAN

Exemplar for Internal Assessment Resource German Level 1. Resource title: Planning a School Exchange

FRAUNHOFER INSTITUTe For MATERIAL FLow and LOGISTIcs IML MARKETSTUDY: aided by:

Security Vendor Benchmark 2016 A Comparison of Security Vendors and Service Providers

Application example AC500 Scalable PLC for Individual Automation Communication between AC500 and KNX network abb

Erste Schritte mit mysql. Der Umgang mit einer relationalen Datenbank

Governance, Risk und Compliance (GRC) in der Cloud

Wolkige Versprechungen - Freiraum mit Tuecken

CobraNet TM User s Manual

Upgrade-Preisliste. Upgrade Price List

DV4 - Citrix CloudGateway: Access and control Windows, SaaS and web applications. Systems Engineer, Citrix Systems GmbH

Bei Fragen zu dieser Änderung wenden Sie sich bitte an Ihren Kundenbetreuer, der Ihnen gerne weiterhilft.

Programmieren von Schnittstellen für LiveCycle ES2-Modulen (November 2009)

(51) Int Cl. 7 : G03G 15/00

Innovative network monitoring technologies for hydraulically not separated large zones

Medientechnik. Übung MVC

Due Diligence and AML Obligations

(51) Int Cl.: G06F 21/00 ( ) H04L 29/06 ( )

Python erweitern in C und C++

(51) Int Cl.: H04M 3/50 ( )

Citrix NetScaler Best Practices. Claudio Mascaro Senior Systems Engineer BCD-Sintrag AG

(51) Int Cl.: H04L 9/24 ( ) G06Q 10/00 ( )

SPECTRUM IM. SSA 3.0: Service AND Event/Alert Umbrella DACHSUG 2011

EMC Greenplum. Big Data meets Big Integration. Wolfgang Disselhoff Sr. Technology Architect, Greenplum. André Münger Sr. Account Manager, Greenplum

Softwareprojekt: Mobile Development Einführung Objective-C. Miao Wang, Tinosch Ganjineh Freie Universität Berlin, Institut für Informatik

MASTER THESIS ABOUT THE RELEVANCE OF THE CONTEXT FOR THE MOOC LEARNER EXPERIENCE

INSRUCTION MANUAL AND GUARANTEE POLICY

StarterKit Embedded Control SC13 + DK51. From the electronic to the automation

Leitfaden für die Antragstellung zur Förderung einer nationalen Biomaterialbankeninitiative

Is Cloud relevant for SOA? Corsin Decurtins

Vergleich der Versionen von Kapitel 7 des EU-GMP-Leitfadens (September 2012)

Transcription:

Alexander Lambertz 1/ 37 Umgang mit Pointern Seminar Effiziente Programmierung Alexander Lambertz Informatik Universität Hamburg 08. November 2012

Alexander Lambertz 2/ 37 Gliederung 1 Allgemein Definition Wichtige Operatoren Deklaration 2 Nutzung Strings in C Pointer auf einen Array Speicherbedarf Pointer auf einen Array (2) Visualisierung des Speichers 3 Call-by-Value / Call-by-Reference Call-by-Value Call-by-Reference Vergleich Call-by-Value / Call-by-Reference 4 Struct Deklaration Beispiel 5 Typen Typsicherheit in C void-pointer 6 Typische Fehler NULL-Pointer Exception Dangling Pointer

Alexander Lambertz 3/ 37 Was ist ein Pointer? Definition A pointer is a value that designates the address (i.e., the location in memory), of some value. Quelle: http: //en.wikibooks.org/wiki/c_programming/pointers_and_arrays

Alexander Lambertz 4/ 37 Der & und der Operator Erläuterung des & Operators Der & Operator gibt die Speicheradresse einer Variable aus. Erläuterung des Operators Der Operator gibt den Inhalt einer Speicheradresse aus. (Dereferenzierung) Wo zeigt ein Pointer hin? Ein Pointer zeigt immer auf die erste Speicheradresse einer Variable.

Alexander Lambertz 5/ 37 Wie wird ein Pointer deklariert? Deklaration 1 // e. g. some I n t e g e r P o i n t e r 2 i n t i n t P t r ; 3 i n t p t r T o I n t P t r ; 4 // o r some C h a r a c t e r P o i n t e r 5 c h a r c h a r P t r ; 6 c h a r ptrtocharptr ;

Alexander Lambertz 6/ 37 Beispiel zur Benutzung der Operatoren Beispiel 1 i n t main ( ) 2 { 3 i n t i n t e g e r = 1 ; 4 i n t p t r = &i n t e g e r ; 5 6 p r i n t f ( i n t e g e r = %d \n, i n t e g e r ) ; 7 p r i n t f ( p t r = %u \n, p t r ) ; 8 p r i n t f ( p t r = %d \n, p t r ) ; 9 10 p t r = 2 ; 11 12 p r i n t f ( i n t e g e r = %d \n, i n t e g e r ) ; 13 p r i n t f ( p t r = %d \n, p t r ) ; 14 }

Alexander Lambertz 7/ 37 Beispiel zur Benutzung der Operatoren Ausgabe 1 i n t e g e r = 1 2 p t r = 1462442760 3 p t r = 1 4 i n t e g e r = 2 5 p t r = 2

Alexander Lambertz 8/ 37 Wie werden Strings in C abgebildet? Wie wird ein String in C abgebildet? Ein String wird in C als ein Array von Charactern abgebildet.

Alexander Lambertz 9/ 37 Wie wird ein String in C abgebildet? Beispiel 1 #i n c l u d e <s t d i o. h> 2 #i n c l u d e < s t r i n g. h> 3 4 i n t main ( ) 5 { 6 c h a r s t r i n g [ ] = E f f i z i e n t e Programmierung ; 7 8 p r i n t f ( Gesamter S t r i n g : %s \n, s t r i n g ) ; 9 10 p r i n t f ( s t r l e n ( s t r i n g ) = %d\n, s t r l e n ( s t r i n g ) ) ; 11 12 p r i n t f ( s t r i n g [ 0 ] = %c \n, s t r i n g [ 0 ] ) ; 13 p r i n t f ( s t r i n g [ 2 4 ] = %c \n, s t r i n g [ 2 4 ] ) ; 14 15 p r i n t f ( s i z e o f ( s t r i n g ) = %u\n, s i z e o f ( s t r i n g ) ) ; 16 p r i n t f ( s i z e o f ( c h a r ) = %u\n, s i z e o f ( c h a r ) ) ; 17 }

Alexander Lambertz 10/ 37 Wie werden Strings in C abgebildet? Ausgabe 1 Gesamter S t r i n g : E f f i z i e n t e Programmierung 2 s t r l e n ( s t r i n g ) = 25 3 s t r i n g [ 0 ] = E 4 s t r i n g [ 2 4 ] = g 5 s i z e o f ( s t r i n g ) = 26 6 s i z e o f ( c h a r ) = 1 Darstellung des Arrays E f f... n g \0 0 1 2... 23 24 25

Alexander Lambertz 11/ 37 Pointer auf einen Array Beispiel: Parameter der Main-Funktion ausgeben 1 i n t main ( i n t argc, c h a r a r g v ) 2 { 3 c h a r curargv ; 4 5 p r i n t f ( a r g c = %d\n, a r g c ) ; 6 7 curargv = a r g v ; 8 9 // Return a l l Parameters 10 f o r ( i n t n=0; n<a r g c ; n++) 11 { 12 p r i n t f ( A d r e s s o f a r g v [%d ] = %u\n, n, &( curargv ) ) ; 13 // &( curargv ) = curargv 14 p r i n t f ( a r g v [%d ] = %s \n, n, curargv ) ; 15 curargv++; // Moving t h e P o i n t e r 16 } 17 }

Alexander Lambertz 12/ 37 Pointer auf einen Array Der Aufruf 1. / t e s t abc cde Ausgabe 1 a r g c = 3 2 A d r e s s o f a r g v [ 0 ] = 1510333208 3 a r g v [ 0 ] =. / t e s t 4 A d r e s s o f a r g v [ 1 ] = 1510333216 5 a r g v [ 1 ] = abc 6 A d r e s s o f a r g v [ 2 ] = 1510333224 7 a r g v [ 2 ] = cde

Alexander Lambertz 13/ 37 Pointer auf einen Array Ausgabe 1... 2 A d r e s s o f a r g v [ 0 ] = 1510333208 3... 4 A d r e s s o f a r g v [ 1 ] = 1510333216 5... 6 A d r e s s o f a r g v [ 2 ] = 1510333224 7... Der Code 1 i n t main ( i n t argc, c h a r a r g v ) 2... 3 p r i n t f ( A d r e s s o f a r g v [%d ] = %u\ n, n, &( curargv ) ) ; 4... 5 a r g v++; 6...

Alexander Lambertz 14/ 37 Speicherbedarf Definition sizeof() liefert die Anzahl der Bytes, die für eine Variable oder einen Datentyp reserviert werden. Quelle: http: //home.fhtw-berlin.de/~junghans/cref/syntax/sizeof.html Was ist die Ausgabe? Warum? 1 p r i n t f ( s i z e o f ( c h a r ) = %d, s i z e o f ( c h a r ) ) ;

Alexander Lambertz 15/ 37 Speicherbedarf Sizeof Ausgaben 1 s i z e o f ( i n t ) = 4 2 s i z e o f ( c h a r ) = 1 3 s i z e o f ( i n t ) = 8 4 s i z e o f ( c h a r ) = 8 5 s i z e o f ( v o i d ) = 8 // Genauer im A b s c h n i t t T y p s i c h e r u n g Warum 8 Byte? Auf 32 Bit-System sind es 4 Byte und auf einem 16 Bit-System 2 Byte.

Alexander Lambertz 16/ 37 Pointer auf einen Array (2) Beispiel: Argumente der Main-Funktion ausgeben (2) 1 i n t main ( i n t argc, c h a r a r g v ) 2 { 3 p r i n t f ( a r g c = %d\n, a r g c ) ; 4 p r i n t f ( A d r e s s o f a r g v = %u\n, ( i n t ) &a r g v ) ; 5 f o r ( i n t n=0; n<a r g c ; n++) 6 { 7 p r i n t f ( A d r e s s o f a r g v [%d ] = %u\n, n, ( i n t ) &( ( a r g v+n ) ) ) ; 8 p r i n t f ( A d r e s s o f a r g v [%d ] [ 0 ] = %u\n, n, ( i n t ) &( ( ( a r g v+n ) ) ) ) ; 9 p r i n t f ( A d r e s s o f a r g v [%d ] [ 1 ] = %u\n, n, ( i n t ) &( ( ( a r g v+n ) +1) ) ) ; 10 p r i n t f ( a r g v [%d ] = %s \n, n, ( a r g v+n ) ) ; 11 p r i n t f ( a r g v [%d ] [ 0 ] = %c \n, n, ( ( a r g v+n ) ) ) ; 12 p r i n t f ( a r g v [%d ] [ 1 ] = %c \n, n, ( ( a r g v+n ) +1) ) ; 13 } 14 }

Alexander Lambertz 17/ 37 Pointer auf einen Array (2) Ausgabe 1 a r g c = 3 2 A d r e s s o f a r g v = 1503812320 3 A d r e s s o f a r g v [ 0 ] = 1503812376 4 A d r e s s o f a r g v [ 0 ] [ 0 ] = 1503812640 5 A d r e s s o f a r g v [ 0 ] [ 1 ] = 1503812641 6 a r g v [ 0 ] =. / t e s t 7 a r g v [ 0 ] [ 0 ] =. 8 a r g v [ 0 ] [ 1 ] = / 9 A d r e s s o f a r g v [ 1 ] = 1503812384 10 A d r e s s o f a r g v [ 1 ] [ 0 ] = 1503812647 11 A d r e s s o f a r g v [ 1 ] [ 1 ] = 1503812648 12 a r g v [ 1 ] = abc 13 a r g v [ 1 ] [ 0 ] = a 14 a r g v [ 1 ] [ 1 ] = b 15...

Alexander Lambertz 18/ 37 Pointer auf einen Array (2) Visualisierung des Speichers Speicheradresse Inhalt 1503812320 1503812376 1503812376 1503812384 1503812392 1503812640 1503812647 1503812651 1503812640 1503812641 1503812642 1503812643. / t e

Alexander Lambertz 19/ 37 Call-by-Value Beispiel: Call-by-Value 1 v o i d c a l l B y V a l u e ( i n t v a l u e F u n c t i o n ) 2 { 3 p r i n t f ( ( F u n c t i o n ) v a l u e F u n c t i o n = %d\n, v a l u e F u n c t i o n ) ; 4 v a l u e F u n c t i o n = 2 ; 5 p r i n t f ( ( F u n c t i o n ) v a l u e F u n c t i o n = %d\n, v a l u e F u n c t i o n ) ; 6 } 7 i n t main ( ) 8 { 9 i n t valuemain = 1 ; 10 11 p r i n t f ( ( MainFunction ) valuemain = %d\n, valuemain ) ; 12 c a l l B y V a l u e ( valuemain ) ; 13 p r i n t f ( ( MainFunction ) valuemain = %d\n, valuemain ) ; 14 }

Alexander Lambertz 20/ 37 Call-by-Value Ausgabe 1 ( MainFunction ) valuemain = 1 2 ( F u n c t i o n ) v a l u e F u n c t i o n = 1 3 ( F u n c t i o n ) v a l u e F u n c t i o n = 2 4 ( MainFunction ) valuemain = 1

Alexander Lambertz 21/ 37 Call-by-Reference Beispiel: Call-by-Reference 1 v o i d c a l l B y R e f e r e n c e ( i n t v a l u e F u n c t i o n ) 2 { 3 p r i n t f ( ( F u n c t i o n ) v a l u e F u n c t i o n = %d\n, v a l u e F u n c t i o n ) ; 4 v a l u e F u n c t i o n = 2 ; 5 p r i n t f ( ( F u n c t i o n ) v a l u e F u n c t i o n = %d\n, v a l u e F u n c t i o n ) ; 6 } 7 i n t main ( ) 8 { 9 i n t valuemain = 1 ; 10 11 p r i n t f ( ( MainFunction ) valuemain = %d\n, valuemain ) ; 12 c a l l B y R e f e r e n c e (& valuemain ) ; 13 p r i n t f ( ( MainFunction ) valuemain = %d\n, valuemain ) ; 14 }

Alexander Lambertz 22/ 37 Call-by-Reference Ausgabe 1 ( MainFunction ) valuemain = 1 2 ( F u n c t i o n ) v a l u e F u n c t i o n = 1 3 ( F u n c t i o n ) v a l u e F u n c t i o n = 2 4 ( MainFunction ) valuemain = 2 //!!

Alexander Lambertz 23/ 37 Vergleich Call-by-Value / Call-by-Reference Beispiel: Call-by-Value 1 v o i d c a l l B y V a l u e ( i n t v a l u e F u n c t i o n ) 2 { 3 p r i n t f ( ( F u n c t i o n ) v a l u e F u n c t i o n = %d\n, v a l u e F u n c t i o n ) ; 4 v a l u e F u n c t i o n = 2 ; 5... 6 c a l l B y V a l u e ( valuemain ) ; 7... Beispiel: Call-by-Reference 1 v o i d c a l l B y R e f e r e n c e ( i n t v a l u e F u n c t i o n ) 2 { 3 p r i n t f ( ( F u n c t i o n ) v a l u e F u n c t i o n = %d\n, v a l u e F u n c t i o n ) ; 4 v a l u e F u n c t i o n = 2 ; 5... 6 c a l l B y R e f e r e n c e (& valuemain ) ; 7...

Alexander Lambertz 24/ 37 Struct Wie wird ein Struct deklariert? 1 s t r u c t p e r s o n { 2 i n t age ; 3 f l o a t w e i g h t ; 4 c h a r name [ 2 5 ] ; 5 } 6 7 s t r u c t p e r s o n markus, p a u l ; Operatoren 1 markus. age // S t r u c t 2 o d e r 3 paul >age // P o i n t e r to a S t r u c t

Alexander Lambertz 25/ 37 Struct Beispiel 1 s t r u c t p e r s o n { 2 i n t age ; 3 f l o a t w e i g h t ; 4 c h a r name [ 2 5 ] ; 5 } ; 6 7 i n t main ( ) 8 { 9 s t r u c t p e r s o n markus, p a u l ; 10 p a u l = &markus ; // P o t e n t i a l A l i a s e r r o r?! 11 12 markus. age = 4 3 ; 13 markus. w e i g h t = 8 0. 5 ; 14 s t r c p y ( markus. name, Markus Paul Anders ) ; 15 16 p r i n t f ( markus. age = %d\n, markus. age ) ; 17 p r i n t f ( paul >age = %d\n, paul >age ) ; 18 p r i n t f ( ( p a u l ). age = %d\n, ( p a u l ). age ) ; 19 }

Alexander Lambertz 26/ 37 Struct Beispiel 1... 2 p r i n t f ( markus. age = %d\n, markus. age ) ; 3 p r i n t f ( paul >age = %d\n, paul >age ) ; 4 p r i n t f ( ( p a u l ). age = %d\n, ( p a u l ). age ) ; 5... Ausgabe 1 markus. age = 43 2 paul >age = 43 3 ( p a u l ). age = 43

Alexander Lambertz 27/ 37 Typsicherheit in C Beispiel 1 i n t main ( v o i d ) { 2 i n t a = 1 0 ; 3 4 i n t p t r 1 ; 5 f l o a t p t r 2 ; 6 7 p t r 1 = &a ; 8 p t r 2 = ( f l o a t ) &a ; 9 10 p r i n t f ( p t r 1 = %d\n, p t r 1 ) ; 11 p r i n t f ( p t r 2 = %d\n, p t r 2 ) ; 12 13 p r i n t f ( p t r 1 = %d\n, p t r 1 ) ; 14 p r i n t f ( p t r 2 = %d\n, p t r 2 ) ; 15 }

Alexander Lambertz 28/ 37 Typsicherheit in C Ausgabe des Programms 1 p t r 1 = 1583393524 2 p t r 2 = 1583393524 3 p t r 1 = 10 4 p t r 2 = 1583391240 //!!!! Zusammenfassung C und C++ sind NICHT typsicher.

Alexander Lambertz 29/ 37 void-pointer Was ist ein void-pointer? Void pointers are pointers pointing to some data of no specific type. Quelle: http://www.antoarts.com/void-pointers-in-c/ Dereferenzieren eines void-pointers Um einen void-pointer zu dereferenzieren, muss dieser auf einen spezifischen Typ gecastet werden.

void-pointer Beispiel 1 #d e f i n e TYPE INT 0 2 #d e f i n e TYPE FLOAT 1 3 v o i d d o u b l e V a l ( i n t type, v o i d v a r ) { 4 i f ( t y p e==type INT ) { 5 ( i n t ) v a r =2; 6 } e l s e i f ( t y p e==type FLOAT) { 7 ( f l o a t ) v a r =2; 8 } 9 } 10... 11 s t r u c t L i s t N o d e { 12 s t r u c t L i s t N o d e n e x t ; 13 v o i d data ; 14 } ; 15... 16 d o u b l e V a l ( TYPE INT, &i n t e g e r ) ; 17 d o u b l e V a l (TYPE FLOAT, &f l o a t i n g P o i n t ) ; Quelle: http://www.antoarts.com/void-pointers-in-c/ Alexander Lambertz 30/ 37

Alexander Lambertz 31/ 37 void-pointer Typische Verwendung von void-pointern Typischer Weise werden void-pointer in Funktionen wie memcmp genutzt. Hier ist der konkrete Typ des Pointers irrelevant.

Alexander Lambertz 32/ 37 NULL-Pointer Exception Beispiel 1 i n t main ( v o i d ) { 2 i n t m a i n P o i n t e r=null ; 3 p r i n t f ( Content o f m a i n P o i n t e r = %d, m a i n P o i n t e r ) ; 4 } Ausgabe 1 Segmentation f a u l t : 11 // F e h l e r da NULL P o i n t e r

Alexander Lambertz 33/ 37 Dangling Pointer Was ist ein Dangling Pointer? Dangling pointers and wild pointers in computer programming are pointers that do not point to a valid object of the appropriate type. These are special cases of memory safety violations. Quelle: http://en.wikipedia.org/wiki/dangling_pointer

Alexander Lambertz 34/ 37 Dangling Pointer Beispiel 1 v o i d s e c u r e F r e e ( v o i d f u n c t i o n P o i n t e r ) 2 { 3 i f ( f u n c t i o n P o i n t e r!= NULL && f u n c t i o n P o i n t e r!= NULL) 4 { 5 f r e e ( f u n c t i o n P o i n t e r ) ; 6 f u n c t i o n P o i n t e r = NULL ; 7 p r i n t f ( Freed something \n ) ; 8 } 9 } 10 i n t main ( v o i d ) { 11 i n t i n t e g e r, m a i n P o i n t e r ; 12 i n t e g e r = ( i n t ) m a l l o c ( s i z e o f ( i n t ) ) ; 13 i n t e g e r = 5 ; 14 m a i n P o i n t e r = i n t e g e r ; 15 s e c u r e F r e e ( ( v o i d ) &i n t e g e r ) ; 16 p r i n t f ( &m a i n P o i n t e r = %d\n, ( i n t ) m a i n P o i n t e r ) ; //!! U n d e f i n e d!! 17 }

Hinweise zu den Folien 1 Bei den Quelltexten müssen folgende Header eingebunden werden: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> Alexander Lambertz 35/ 37

Alexander Lambertz 36/ 37 Quellen I Yashavant Kanetkas Understanding Pointer in C. BPB Publications, 2009. Galileo Computing:: C von A bis Z - 12.11 void-zeiger http://openbook.galileocomputing.de/c_von_a_bis_z/012_ c_zeiger_011.htm Erster Zugriff: 04.11.2012 C Referenz -sizeof Operatorhttp://home.fhtw-berlin.de/~junghans/cref/SYNTAX/ sizeof.html Erster Zugriff: 04.11.2012 WikiBook: Pointers in C (en) http://en.wikibooks.org/wiki/c_programming/pointers_ and_arrays Erster Zugriff: 29.10.2012

Alexander Lambertz 37/ 37 Quellen II Wikipedia: Operators in C and C++ (en) http: //en.wikipedia.org/wiki/operators_in_c_and_c%2b%2b Erster Zugriff: 29.10.2012 StackOverflow: Is the sizeof(some pointer) always equal to four? http://stackoverflow.com/questions/399003/ is-the-sizeofsome-pointer-always-equal-to-four Erster Zugriff: 29.10.2012 Void pointers in C - AntoArts http://www.antoarts.com/void-pointers-in-c/ Erster Zugriff: 30.10.2012