• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dynamiczna alokacja pamięci w funkcji - C

0 głosów
1,215 wizyt
pytanie zadane 20 czerwca 2018 w C i C++ przez PgK Obywatel (1,380 p.)

Witam,

Czy przedstawione przeze mnie sposoby alokacji pamięci w funkcji są poprawne?

#include <stdio.h>
#include <stdlib.h>

#define N 10

int* alokacja01();
void alokacja02(int* tab);


int main()
{
    //*********** do funkcja alokacja01   ***********************
    int* tab01 = alokacja01();
    //jakies operacje na tab01
    free(tab01);


    //*********** do funkcja alokacja02   ***********************
    int* tab02;
    alokacja02(&tab02);
    //jakies operacje na tab02
    free(tab02);

    return 0;
}

//******************************************
int* alokacja01()
{
    int* tab = (int*)malloc(N*sizeof(int));
    return tab;
}

//******************************************
void alokacja02(int* tab)
{
    tab = (int*)malloc(N*sizeof(int));
}

 

 

1 odpowiedź

–1 głos
odpowiedź 20 czerwca 2018 przez criss Mędrzec (172,570 p.)
I tak i nie. Technicznie jest ok, ale w większym kodzie łatwo można się pogubić która funkcja alokuje pamięć (i trzeba ją zwolnić na zewnątrz) a która nie. Dlatego unika się takich sytuacji i generalnie można powiedzieć, że stylistycznie (? tak się mówi?) twój kod nie jest poprawny.
komentarz 20 czerwca 2018 przez draghan VIP (106,230 p.)
Criss, ktoś Ci się chyba włamał na kotno. :o
komentarz 20 czerwca 2018 przez criss Mędrzec (172,570 p.)
?? O co chodzi?
komentarz 28 czerwca 2018 przez draghan VIP (106,230 p.)

Poziom tej wypowiedzi odstaje od pozostałych Twoich postów, stąd przypuszczenie że to nie Ty napisałeś. :) Zapewne dlatego też dostałeś minusa (nie ode mnie).


Dlaczego uważam że jakość tej odpowiedzi jest niska?

w większym kodzie łatwo można się pogubić która funkcja alokuje pamięć (i trzeba ją zwolnić na zewnątrz) a która nie

Obydwie przedstawione przez autora funkcje alokują pamięć i po wywołaniu obu trzeba ją zwolnić. Chyba że piszesz o ogóle wszystkich funkcji na świecie, a nie o tych konkretnych - wtedy kiepsko się wyraziłeś.

Dlatego unika się takich sytuacji

Ale... Jakich sytuacji? laugh


 

komentarz 28 czerwca 2018 przez criss Mędrzec (172,570 p.)
Wybacz :D Dość często pisze coś tego typu widocznie byłem już zmęczony. Mówiłem o wszystkich funkcacj w jakimś większym projekcie wśród ktorych można znaleźć takie które alokują pamięć i zwracają do niej wskaźnik. Masz racje, że nie jest to zbyt jasno napisane, ale już trudno :P

Podobne pytania

0 głosów
1 odpowiedź 577 wizyt
0 głosów
2 odpowiedzi 981 wizyt
0 głosów
1 odpowiedź 846 wizyt
pytanie zadane 7 kwietnia 2023 w C i C++ przez Zuzan Początkujący (390 p.)

93,695 zapytań

142,612 odpowiedzi

323,223 komentarzy

63,224 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...