Zwalnianie pamięci.
Ostatnio zmodyfikowano 2015-10-18 15:45
C-Objective Temat założony przez niniejszego użytkownika |
Zwalnianie pamięci. » 2015-10-18 12:34:20 Witam. Jak mam taki kod: #include <stdlib.h>
foo() { int * a =( int * ) malloc( sizeof( int ) ); * a = rand() % 100 + 1; return a; } main() { srand( time(( void * ) 0 ) ); auto a =( int * ) malloc( sizeof( int ) ); * a = foo(); printf( "%d\n", foo() ); free(( void * ) a ); return 0; }
To jak zwolnić pamięć w foo()? |
|
pekfos |
» 2015-10-18 12:50:22 To jak zwolnić pamięć w foo()? |
Na moje oko, to celem funkcji foo() jest zwrócenie adresu na zaalokowany obszar pamięci. Zwolnienie go tam nie ma najmniejszego sensu. * a = foo(); printf( "%d\n", foo() );
|
Podobnie, jak ten kod. |
|
carlosmay |
» 2015-10-18 12:51:47 #include <stdlib.h> #include <cstdio> #include <ctime>
int * foo() { int * a =( int * ) malloc( sizeof( int ) ); * a = rand() % 100 + 1; return a; } int main() { srand( time( 0 ) ); auto a =( int * ) malloc( sizeof( int ) ); a = foo(); printf( "%d\n", * a ); free(( void * ) a ); getchar(); return 0; }
Nie zwolnisz w foo(), bo przecież wcześniej wraca z wartością do miejsca wywołania. Jeśli zwracasz wskaźnik, to czemu chcesz go zwolnić w foo(), w main() nie pasuje? |
|
C-Objective Temat założony przez niniejszego użytkownika |
» 2015-10-18 15:45:16 Czyli w foo nie trzeba zwalniać ponieważ wskaźnik bez kopii jest przekazywany odrazu do a? |
|
« 1 » |