Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » dynamische speicherverwaltung

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
26.08.2003, 13:25 Uhr
~hilflos
Gast


was mach ich falsch?

C++:
int funkt(int *pointer);

int main(int argc, char *argv[])
{
    int *pointer ;
    funkt(pointer);
    cout<<(*pointer)<<endl;
    return 0;
}

int funkt(int *pointer)
{
    pointer = new int[2];
    pointer[0]=0;
    pointer[1]=1;
    cout<<(*pointer)<<endl;
    return 0;
}


Ausgabe:
0
segmentation fault
---------

ich möchte, das das Programm in der Unterfunktion den Speicherplatz für die Variable, die in main deklariert wird, anfordert.
Dann möchte ich auf die Belegung, die in funkt gemacht wird in main zugreifen können??
Bitte helft mir!!

Dieser Post wurde am 26.08.2003 um 14:41 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.08.2003, 13:31 Uhr
virtual
Sexiest Bit alive
(Operator)


Du machst einen Call by value, du brauchst aber einen Call by reference:

C++:
int funkt(int*& pointer) ...


Pointer its ein Zeiger. Bei deiner Version wird eine Kopie dieses Zeigers auf den Stack gelegt und dann funkt aufgerufen. funkt selbst verändert dieseKopie zwar, aber wenn funkt verlassen wird, geht die Kopie und damit die Änderung verloren.
Daher muß du es hinbekommen, daß main nicht eine Kopie, sondern das Original übergibt. Das geht mit Referenzen, also dem Ampersand, was ich oben hinzugefügt habe.

Davon abgesehen solltest du in main noch am Ende ein delete[] pointer spendieren,
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
27.08.2003, 14:46 Uhr
~RHBaum
Gast



C++:
int funkt(int*& pointer) ...


Das sieht aber extrem <zensiert> aus !

Typisch c waere :

C++:
int funkt(int** pointer) ...



Typisch C++ waere

C++:
int funkt(CMyCoolSmartPointerClass & rp) ...



Sprich, in C gibts keine referenzen, also wenn die Grundlagen von Pointer mittels C grad lernst, nimm Pointer auf Pointer ! :-)

Wenn nen sauberes C++ Design willst ... Vermeidest es sowieso Zeiger wild an funktionen zu uebergeben ... besonders da du ausserhalb nie weisst, was die funktion innerhalb mit deinem zeiger macht ... und ob du das ding wieder freigeben musst oder nich.

Da verwendet man besser Smartpointer (Wrapperklassen fuer pointer) oder wenss sowieso ne zeichenkette ist, die entsprechende Stringklasse ...

Ciao ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: