Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zwalnianie pamięci.

Ostatnio zmodyfikowano 2015-10-18 15:45
Autor Wiadomość
C-Objective
Temat założony przez niniejszego użytkownika
Zwalnianie pamięci.
» 2015-10-18 12:34:20
Witam. Jak mam taki kod:
C/C++
#include <stdlib.h>
/*Bez zmiennych globalnych.*/
foo() {
    int * a =( int * ) malloc( sizeof( int ) );
    * a = rand() % 100 + 1;
    /*Tu nie bo nie rozpozna a.*/
    return a;
    /*free((void*)a)?*/
}
main() {
    srand( time(( void * ) 0 ) ); /*(void*)0 to odpowiednik NULL */
    auto a =( int * ) malloc( sizeof( int ) );
    * a = foo();
    printf( "%d\n", foo() );
    free(( void * ) a );
    return 0;
}
To jak zwolnić pamięć w foo()?
P-138763
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.

C/C++
* a = foo();
printf( "%d\n", foo() );
Podobnie, jak ten kod.
P-138765
carlosmay
» 2015-10-18 12:51:47
C/C++
#include <stdlib.h>
#include <cstdio>
#include <ctime>
/*Bez zmiennych globalnych.*/
int * foo() {
    int * a =( int * ) malloc( sizeof( int ) );
    * a = rand() % 100 + 1;
    /*Tu nie bo nie rozpozna a.*/
    return a;
    /*free((void*)a)?*/
}
int main() {
    srand( time( 0 ) ); /*(void*)0 to odpowiednik NULL */
    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?
P-138766
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?
P-138780
« 1 »
  Strona 1 z 1