Void-Pointer erhöhen



  • hi 🙂

    wie kann ich einen Void-Pointer erhöhen?

    DWORD test;
    void *pptest;

    // pptest wird initialisiert

    test=(((DWORD)ppvBits)++);

    bzw.

    ((DWORD*)pptest)++;
    test = (DWORD)pptest;

    es tritt jedes Mal folgender Fehler auf:
    ....cpp(140) : error C2105: '++' muss ein L-Wert sein



  • ihr versucht die Pointerafresse zu addieren. Das ganze muss folgendermaßen aussehen:
    Du musst als erstes mal pptest auf irgendwas zeigen lassen. Z.b.
    DWORD test;
    DWORD test2;
    void pptest;
    pptest = &test2; //pptest zeigt auf den Wert von test2 (falls dus nicht wissen solltest &test2 ist die memmory-adresse von test2)
    (
    (DWORD*)pptest)++;
    test = ((DWORD)pptest);
    so müsstes gehen
    Du versuchst irgendwie einen uninitialisierten pointer zu erhöhen



  • Wenn der Wert nicht dauerhaft erhöht werden muss, dann kannst du statt ++ an der Stelle + 1 verwenden.

    MfG mAV



  • *moralapostelei* Ooooh, wenn der ganze Code so aussieht crasht es früher oder später ⚠ . Ich würde mir bevor ich sowas schreibe Gedanken machen ob es nicht besser geht.



  • jo da hast du allerdings recht aber naja ich frag da schon garnich mehr



  • mwoidt schrieb:

    ihr versucht die Pointerafresse zu addieren. Das ganze muss folgendermaßen aussehen:
    Du musst als erstes mal pptest auf irgendwas zeigen lassen. Z.b.
    DWORD test;
    DWORD test2;
    void pptest;
    pptest = &test2; //pptest zeigt auf den Wert von test2 (falls dus nicht wissen solltest &test2 ist die memmory-adresse von test2)
    (
    (DWORD*)pptest)++;
    test = ((DWORD)pptest);
    so müsstes gehen
    Du versuchst irgendwie einen uninitialisierten pointer zu erhöhen

    des mit dem auf was Zeigen lassen wollte ich durch // initialisisieren deutlich machen, k, aber so geht's natürlich auch 😛

    ne, so geht's net..
    mit ((DWORD)pptest)++; erhöht man in dem Fall ja nur test2 um 1
    ich möchte aber, dass pptest auf eine andere Adresse zeigt, und zwar genau 1 DWORD weiter
    nur wie geht das?
    normalerweise kann man das ja bei nem Int-Pointer ohne Probleme mit ++ machen
    aber wieso geht des net beim Void-Pointer, wenn ich den DWORD *-Cast verwenden

    @MaSTaH:
    klar crasht das 2. Bsp., weil test2 keinen Wert hat, aber beim 1. Bsp sollte der Kommentar dieses als Pseudo-Code erfüllen, eben damit des net crasht..
    mir geht's aber nur darum, wie man prinzipiell nen Void-Poitner erhöht
    nur es geht scheinbar?! leider net wie bei anderen Pointern



  • Um mal eins klarzustellen: mit einem void i;i++; (das müsste gehen glaub ich) erhöhst du wennschon nicht die Adresse um eine Variable, sondern um eine Größeneinheit. Wie groß die ist hängt von prozessoremodus bzw. vom pm-deskriptor ab



  • mwoidt schrieb:

    Um mal eins klarzustellen: mit einem void i;i++; (das müsste gehen glaub ich) erhöhst du wennschon nicht die Adresse um eine Variable, sondern um eine Größeneinheit. Wie groß die ist hängt von prozessoremodus bzw. vom pm-deskriptor ab

    1. das geht nicht. schon die deklaration funktioniert nicht, da void ein unvollständiger Typ ist. wenn es ein void* wär, würde die Erhöhung nicht funktionieren, aus dem selben Grund übrigens. gcc hat eine Erweiterung, die Pointerarithmetik mit void* zuläßt.
    2. prozessormodus oder pm-descriptor haben mit c++ nichts zu tun


  • mwoidt schrieb:

    Um mal eins klarzustellen: mit einem void i;i++; (das müsste gehen glaub ich)

    Nein.

    Selbst wenn dort
    void* i;
    i++;
    stehen wuerde, wuerde es nicht gehen.



  • imho ist die ganze Diskussion überflüssig.
    Es gibt nicht umsonst Alternativen zu void *.

    Devil



  • void * p;
    ((char *&)p)++;
    

Anmelden zum Antworten