Zeiger auf Zeiger

17/09/2008 - 10:50 von a.p. | Report spam
Hallo NG,

ich habe eine (simple) Funktion
int create (...)
geschrieben, welche mittels malloc() Speicherplatz anfordert und über den
Rückgabewert den Status zurückmeldet.

Die erste Version hat nicht funktioniert (einfacher Zeiger), aber die
zweite Version (Zeiger auf Zeiger) schon.

Weiss jemand von Euch, wo da genau der Unterschied liegt. Und stimmt
eigentlich mein malloc()-Aufruf für Zeigerzeiger ?

Danke und Lg
A.P.



// Version 1
// funktioniert nicht

int create(char * str)
{
str = malloc( sizeof(char) );
if ( str )
{
strcpy (str,"12345"); // nur eine testbefuellung
return 1;
}
return 0;
}

void testFunc()
{
char * str = NULL;
int status = 0 ;

status = create ( str );
if ( 1 == status )
printf( "%s", str ); // str ist hier immer NULL !!!
else
printf( "ERROR: memory allocation failed");
}

// Version 2
// funktioniert


int create(char ** str)
{
*str = malloc( sizeof(char) );
if ( *str )
{
strcpy (*str,"12345");
return 1;
}

return 0;
}

void testFunc()
{
char * str = NULL;
int status = 0;
status = create ( &str );
if ( status == 1 )
printf( "%s", str ); // printf gibt korrekt 12345 aus
else
printf( "ERROR: memory allocation failed");
}
 

Lesen sie die antworten

#1 Markus Schaber
17/09/2008 - 11:28 | Warnen spam
Hi, a.p.,

"a.p." wrote:

ich habe eine (simple) Funktion
int create (...)
geschrieben, welche mittels malloc() Speicherplatz anfordert und über den
Rückgabewert den Status zurückmeldet.

Die erste Version hat nicht funktioniert (einfacher Zeiger), aber die
zweite Version (Zeiger auf Zeiger) schon.

Weiss jemand von Euch, wo da genau der Unterschied liegt.



Ja.

Parameter werden in C immer "by value" übergeben, also als Kopie an
Deine Funktion. Deine Funktion hat also eine Kopie des Zeigers aus
testFunc, und àndert dann mittesl malloc lustig an dieser Kopie herum.

Das Original in testFunc krieg von der Änderung nix mit, und zeigt
weiterhin auf NULL.

Mit dem Zeiger auf Zeiger erlaubst Du create(), den Originalzeiger zu
veràndern.

Und stimmt eigentlich mein malloc()-Aufruf für Zeigerzeiger ?



Soweit ich das sehe, ja.


Gruß,
Markus

Regards,
Markus

Markus Schaber | Logical Tracking&Tracing International AG
Dipl. Inf. | Software Development GIS

Fight against software patents in Europe! www.ffii.org
www.nosoftwarepatents.org

Ähnliche fragen