Pointer und Speicherallokierung



  • hallo,
    folgender code:

    [cpp]
    #include <stdio.h>
    #include <stdlib.h>
    #define LEN 5

    void main()
    {
    int *pointer = malloc(LEN * sizeof(int));

    free(pointer);
    }
    [code]

    ich koennte schwoeren ich habe diesen code schon einmal in dieser form benutzt. wenn ich aber kompilierenn will bekomme ich einen error:

    ponter.cpp(7) : error C2440: 'initializing' : 'void *' kann nicht in 'int ' konvertiert werden
    Konvertierung von 'void
    ' in Zeiger auf nicht-'void' erfordert eine explizite Typumwandlung

    ich habe auch in meien buechern nachgeschlagen und da steht es genauso...
    bin ich einfach nur zu doof??

    benutze MS Visual C++



  • Compilier das als C, nicht als C++



  • 🙄 hmm das war bloed...thx



  • Hallo!

    Das geht so:

    int *pointer = (int*)malloc(LEN * sizeof(int));
    

    Du musst Konvertierung nach int* durchführen, da malloc den Typ void* zurückgibt!

    mfg LastManStanding



  • LastManStanding schrieb:

    Konvertierung

    Fachbegriff: to cast into something, (eingedeutscht: etwas nach ... casten)

    in C++ ist das bei allen pointern nötig
    bei C ist ein cast von void* nach beliebig* implizit
    deswegen hatte er nen fehler, der bei C nicht kommt



  • c.rackwitz schrieb:

    bei C ist ein cast von void* nach beliebig* implizit

    Ist auch besser so, eine Adresse bleibt es in jedem Fall. Das blöde C++ übertreibt's da ein wenig.



  • hehe meine meinung
    ein freund hat mir gestern mal die macken von winapi code gezeigt. tausend typen für einen 32bit signed int. einmal ein file handle, mal ein window handle, mal dies mal jenes...
    nur weil man damit dem coder ein netz aufspannt, wenn er mal nicht bei verstand ist...
    pech nur, wenn beim kunststück das netz im weg ist


Anmelden zum Antworten