Pourquoi malloc est utilisé pour allouer de la mémoire dans la liste chaînée

Pourquoi malloc est utilisé pour allouer de la mémoire dans la liste chaînée

Je ne sais pas si quelqu'un est comme moi. Quand j'apprenais les listes chaînées, je ne pouvais pas comprendre pourquoi malloc était utilisé pour allouer de la mémoire. Après y avoir réfléchi attentivement, c'était parce que je savais que int pouvait aussi être utilisé pour allouer de la mémoire. J'ai toujours pensé que je pouvais utiliser quelque chose au lieu de malloc pour l'allocation de mémoire. Après y avoir réfléchi, j'ai soudainement compris.

  1. Le type de données de base peut allouer de la mémoire, par exemple, int a = 0 ;il s'agit d'allouer un morceau de mémoire, et en même temps de donner à ce morceau de mémoire un nom temporaire (pourquoi est-ce temporaire ? Parce qu'après la libération de la mémoire, cet espace mémoire peut être réalloué à d'autres variables), et un "0" est stocké (bien sûr, c'est une chaîne de nombres binaires dans le bloc mémoire).
  2. Pourquoi un type de données de référence (objet personnalisé, etc.) est-il appelé référence ? Par exemple, il s'agit d'affecter un autre alias b à la mémoire où se trouve la variable a , ce qui peut se comprendre ainsi. 类型+变量名Les types de données de référence peuvent-ils allouer de la mémoire directement comme les types de données de base ? Bien sûr que non! En se référant à l'implémentation de la définition de type de données de base, nous pouvons savoir que pour allouer de la mémoire, nous devons savoir combien d'espace allouer. Nous savons déjà que int occupe 4 octets, mais nous ne connaissons pas la taille de mémoire requise lorsque nous donnons directement un objet. Par conséquent, lors de l'allocation de mémoire pour les types de données de référence, nous devons utiliser des fonctions telles que malloc, realloc et "utilisation de realllloc" pour allouer de l'espace (la taille de l'espace peut être personnalisée ) .

Ci-dessous la déclaration de la fonction malloc().

void *malloc(size_t size)//size -- 内存块的大小,以字节为单位。

Cette fonction renvoie un pointeur vers la mémoire de la taille allouée. Renvoie NULL si la requête échoue.
! ! ! Cela ne comprend-il pas parfaitement le code de la liste liée individuellement ?
LNode* newNode = (LNode*)malloc(sizeof(LNode));

  • Pourquoi voulez-vous forcer la conversion ? Étant donné que les pointeurs ont également des types de données, des types de données incorrects peuvent entraîner des problèmes lors de l'accès aux éléments de données.

Ce qui précède sont quelques idées lors de l'étude d'aujourd'hui. Bienvenue à me corriger.

Guess you like

Origin blog.csdn.net/tang20030306/article/details/130072832