CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C] question initialisation structure

sd460
sd460
Niveau 10
17 mai 2009 à 01:13:58

bonjour!

petite question qui m'intrigue... Voila 2 définition de type :

typedef struct liste
{
int IndiceVoisin;
int PoidsVersVoisin;
struct liste * pSuivant;
} T_Liste;

typedef T_Liste * T_Graphe[NBNOEUD];

Pour créer une liste dans une fonction, je dois forcément appeler un malloc non :question:
Alors que pour créer un T_Graphe, je n'ai aps besoin de malloc...

C'est normal :question:
Quelle est l'explication ?

merci

godrik
godrik
Niveau 30
17 mai 2009 à 01:34:03

Pour creer une liste dans un fonction, il ne faut pas forcement appeller malloc.
Il y a deux zone memoires dans un process, le tas et la pile. La pile est l'endroit ou toutes les variables que tu declares dans une fonction se trouve. Ces variables sont cree au moment ou les fonctions sont appelle et sont supprimer de la memoire quand tu sort de la fonction.
Le tas est une zone de stockage qui ne depend de la pile. On y alloue de la memoire avec malloc.

dnob700
dnob700
Niveau 10
17 mai 2009 à 17:00:49

un TGraphe est un tableau de liste chainées, tu as le droit dans une fonctions d'allouer un tableau sans utiliser malloc. Seulement, il sera détruit lorsque tu sort de la fonction.

Il faut noter que tu alloue un tableau de liste chainée. Tu pourrais aussi alloué un tableau d'élément de la liste en une seule fois, puis initialiser les pointeurs suivants pour pointer sur la case suivante du tableau. Ce ne serait pas la maière la plus efficace pour stocker la liste, mais par contre c'est une manière efficace de l'allouer avec un seule appel à malloc.

godrik
godrik
Niveau 30
17 mai 2009 à 17:06:41

le point de dnob est interessant, tu peux allouer toutes la structure en un seul appel a malloc. C'est interessant pour les petite structures qui sont ainsi stocke de facon contigu en memoire, ce qui est efficace pour les access memoires.
De plus malloc peut ajouter une sur-consommation de memoire par allocation (bien que certaines implementation ne le fasse pas). Ainsi faire moins d'allocation peut s'averer utile.

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment