Adress operator malloc



  • Hallo,

    struct personen *new;

    new = (struct personen *)malloc( sizeof( struct personen ) );

    struct Person ist der Datentyp

    new ist der zeiger

    Dann steht da new = ...

    Ich verstehe nicht so ganz. Und zwar wird new der Speicher von struct Person reserviert...

    Die Adresse wird mit dem & übergeben .. müsste es dannn nicht also:

    new = &(struct personen *)malloc( sizeof( struct personen ) );

    Gruß



  • Also erstmal sollte man das Ergebniss von malloc/calloc NICHT casten. Das passiert automatisch, wenn alles in Ordnung ist.
    Weiterhin gibt malloc/calloc bereits eine Adresse zurück. Du darfst also kein weiters & davor machen.



  • (struct person*) ist ein Cast auf (struct person*), d.h. dem Compiler wird mitgetielt, dass der Ausdruck hinter dem Cast wie ein Zeiger auf eine person Struktur behandelt werden muss.

    Aber.... in C ist das malloc-Casten Todsünde und man geht in die Programmierhöle dafür. 😡

    Richtig ist es also

    struct personen *new; 
    
    new = malloc( sizeof( *new ) );
    

    Der Adress-Operator & liefert die Adresse einer Variable. (struct person*) ist ein Cast, keine Variable also ist keine Adresse zugeordnet und somit ist es ein Compilerfehler.

    Die Semantik von void *malloc(size_t len) ist folgede: malloc reserviert 'len' Bytes Speicher auf dem Heap und liefert einen Zeiger auf das erste Byte zurück. Deswegen genügt es die Funktion so aufzurufen, wie ich oben geschrieben habe.

    Außerdem ist malloc keine Variable sondern eine Funktion und der Adressoperator passt da nicht.

    btw: verwende die CPP-Tags des Boards, da ist doch nicht so schwer, oder 🙄

    //edit: mein Verbrechen gerade noch aus der Welt geschaffen 😃


  • Mod

    supertux schrieb:

    Aber.... in C ist das malloc-Casten Todsünde und man geht in die Programmierhöle dafür. 😡

    und ohne Not sizeof auf Typen anzuwenden ist ebenfalls ein Schwerverbrechen.



  • camper schrieb:

    supertux schrieb:

    Aber.... in C ist das malloc-Casten Todsünde und man geht in die Programmierhöle dafür. 😡

    und ohne Not sizeof auf Typen anzuwenden ist ebenfalls ein Schwerverbrechen.

    aber immerhin keine Todsünde 😃 😉



  • hallo,

    Ich habe eben im buch c in 21 tage gelesen das malloc den speicher sucht und den reservierten speicher die adresse des erstes bytes zurück gibt...

    wer nachlesen möchte :

    http://141.56.132.162/res2/CBuch_21Tage_OK.pdf

    Würd gern nur wissen warum es nuuur vom erstes byte die adresse zurückgibt hat es irgend eine bedeutung das erste byte ?

    Gruß



  • hassun schrieb:

    Ich habe eben im buch c in 21 tage gelesen das malloc den speicher sucht ...

    ach so, malloc muss den speicher erst 'suchen'. 😃

    hassun schrieb:

    Würd gern nur wissen warum es nuuur vom erstes byte die adresse zurückgibt hat es irgend eine bedeutung das erste byte ?

    das ist jetzt nicht dein ernst, ne?
    nun hör mal auf, die leute hier zu veralbern.
    🙂



  • hassun schrieb:

    Würd gern nur wissen warum es nuuur vom erstes byte die adresse zurückgibt hat es irgend eine bedeutung das erste byte ?

    schon mal daran gedacht, dass das erste Byte der Anfang der Bytefolge ist??? Oder würde deiner Meinung nach mehr Sinn machen, wenn du die Adresse des Bytes bekommen würdest, welches 1/3 vom Anfang entfernt ist???



  • Tachyon schrieb:

    Also erstmal sollte man das Ergebniss von malloc/calloc NICHT casten.

    Gut, dass du das nochmal erwähnt hast. Wurde ihm ja erst 30 Mal in älteren Threads gesagt. Scheinbar ist das doch zu schwer zu verstehen 🤡

    supertux schrieb:

    Oder würde deiner Meinung nach mehr Sinn machen, wenn du die Adresse des Bytes bekommen würdest, welches 1/3 vom Anfang entfernt ist???

    1/3 nicht, aber 1/2 fände ich schon sehr sinnig 🙂

    Sorry fürs OT, aber diese Hasso Threads ziehen mich mittlerweile irgendwie magisch an. Jedesmal ein neuer Thread und eine neue Frage, aber dennoch so gut wie immer das gleiche 😃



  • supertux schrieb:

    ....mehr Sinn machen, wenn du die Adresse des Bytes bekommen würdest, welches 1/3 vom Anfang entfernt ist???

    oh, das wäre toll. dann wären die adressen nicht 0xirgendwas, sondern 0xirgendwas.33333...

    feigling schrieb:

    Sorry fürs OT, aber diese Hasso Threads ziehen mich mittlerweile irgendwie magisch an. Jedesmal ein neuer Thread und eine neue Frage, aber dennoch so gut wie immer das gleiche

    er troll doch nur rum und lacht euch aus. so doof, wie er tut, kann keiner sein.
    🙂



  • hassun schrieb:

    Würd gern nur wissen warum es nuuur vom erstes byte die adresse zurückgibt hat es irgend eine bedeutung das erste byte ?

    Ja. Das ist der Anfüher der anderen Bytes. Der Anfüher steht ganz am Anfang der Adresse, der kommt ganz zuerst.
    Nach dem Chefbyte kommen dann die anderen Bytes, die Anhänger, alle direkt nacheinander. Die Anhänger sind alle nummeriert, der Anführer auch.
    🙂



  • fricky schrieb:

    er troll doch nur rum und lacht euch aus. so doof, wie er tut, kann keiner sein.
    🙂

    ob du's glaubt oder nicht, ich habe schon mit Leuten zu tun gehabt, die wirklich so dumm waren (nichts für Ungut hasso)


Anmelden zum Antworten