free("den return wert einer funktion")



  • chille07 schrieb:

    supertux schrieb:

    Da ist ja ein Fehler

    int* funktion(size_t size)
    {
        int* b = malloc(sizeof(int)*size);
        if(!b) return NULL;
        ... /* mach was mit *b und liefere den Pointer zurück */
        return b;
    }
    
    ...
    
    void foo()
    {
        int* x = funktion(10);
        ...
        /* Speicher freigeben */
        free(x);
    }
    

    der rückgabetyp von function ist doch "int*" !!!

    tja, das war meine Korrektur. Schau Post 001, schau dir das erste Post an.

    malloc gibt einen typenlosen zeiger zurueck (void 😉
    einfach expliziet auf int * casten und zeiger auf einen int returnen

    Nur unter C++ muss man casten, unter C brauchst du nicht zu casten.



  • supertux schrieb:

    malloc gibt einen typenlosen zeiger zurueck (void 😉
    einfach expliziet auf int * casten und zeiger auf einen int returnen

    Nur unter C++ muss man casten, unter C brauchst du nicht zu casten.

    ich bin mir sogar sehr sicher das man casten muss
    der compiler kann keine impliziete Typenumwandlung von void * to int * durchfuehren

    glaubst du wirklich das man nur unter c++ casten muss..?



  • leo aka qsch schrieb:

    ich bin mir sogar sehr sicher das man casten muss

    muss man nicht

    /* test.c */
    #include <stdlib.h>
    
    void* foo();
    void a();
    
    void* foo()
    {
        return malloc(5);
    }
    
    void a()
    {
        int* a = foo();
        char* q = foo();
        size_t* b = foo();
        free(b);
        free(q);
        free(a);
    }
    

    Wenn ich casten müsste, würde der Compiler meckern oder eine Warnung bringen.

    rex@supertux:~> gcc -c test.c -ansi
    rex@supertux:~>
    

    Wie du siehst, der Compiler bringt gar keine Warnung. Wäre das aber C++

    rex@supertux:~> cp test.c test.cpp
    `test.c' -> `test.cpp'
    rex@supertux:~> g++ -c test.cpp -ansi
    test.cpp: In function `void a()':
    test.cpp:13: error: invalid conversion from `void*' to `int*'
    test.cpp:14: error: invalid conversion from `void*' to `char*'
    test.cpp:15: error: invalid conversion from `void*' to `size_t*'
    rex@supertux:~>
    

    Wie du siehst, man muss in C++ casten, in C nicht.

    glaubst du wirklich das man nur unter c++ casten muss..?

    Bis heute musste ich nie mit C casten.



  • EDIT: ---

    EDIT2: cls; hab die "Seite 3" übersehen


Anmelden zum Antworten