C - Pointer auf Speicher übergeben und manipulieren
Geizhals » Forum » Programmierung » C - Pointer auf Speicher übergeben und manipulieren (24 Beiträge, 327 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
.
Re: C - Pointer auf Speicher übergeben und manipulieren
12.11.2008, 22:07:48
Ach wieder mal :)

Da ist aber viel falsch/komisch:

int main()
{
    int * pInt = NULL;         // gut ein ptr auf 0
    int addr = 0;              // ein integer mit 0 initialisiert
    mach5platz(&addr);         // die Adresse des int word übergeben
    pInt = (int*) addr;        // DANGER!: int* ist nicht immer
                               // gleich groß wie int! (zb 64Bit Os)
                               // Also Inhalt eines Int als Adresse zu
                               // verwenden ist eine Todsünde
    printf("%d",*pInt);        // gib den Wert aus auf den pInt zeigt

    return 0;
}

int mach5platz(int * pPlatz)   // <- pPlatz ist Addresse auf addr von oben
{
    int * test;                // ein uninitialisierter ptr
    test = malloc( sizeof(int) *5);  // ok ein int array mit Größe 5
    *(test) = 999;             // ok in index 0 schreiben wir 999
  //  pPlatz = test;           // naja der compiler frisst es schon :)
// du biegst den ptr pPlatz auf eine neue Adresse. Der hat halt vorher
// auf addr gezeigt, und nun zeigt er auf test. addr veränderst du damit
// nicht!


   *pPlatz = (int)test;        // jetzt schreibst du in addr rein. also die
                               // Adresse von test als wert int addr

    return 0;
}

Richtige Lösung im nächsten Post...
--
Gibts noch Leute, die die Signatur nicht blocken?
C++, Mono, C#, Java, XML, Open Source developer
Ubuntu - Linux for Human Beings
Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung