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 returnenNur 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 returnenNur 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 * durchfuehrenglaubst 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