Maison > Article > développement back-end > Qu'arrive-t-il à la mémoire variable une fois sa portée terminée : écrasée immédiatement ou réservée jusqu'à la fin de la fonction ?
Lorsqu'une variable est déclarée dans un bloc de code, sa portée définit les parties du code où elle est accessible . Mais qu’arrive-t-il à la mémoire allouée à la variable lorsque sa portée prend fin ? Est-il écrasé immédiatement, ou reste-t-il réservé jusqu'à la fin de la fonction dans laquelle il réside ?
Cette question découle de l'extrait de code suivant :
foo() { int *p; { int x = 5; p = &x; } int y = *p; // undefined behavior }
Si la mémoire de la variable x est toujours alloué après avoir été hors de portée, le pointeur p continuera à pointer vers le bon emplacement, nous permettant d'accéder à la valeur de x même s'il n'est plus dans scope.
Pour résoudre cette énigme, nous devons nous plonger dans les concepts de scope et de durée de vie.
Scope englobe les sections de code où une variable est accessible. Lorsqu'une variable est déclarée entre accolades ({}), sa portée est limitée au bloc de code inclus.
Durée de vie englobe la durée pendant laquelle une variable ou l'objet existe dans un état valide. Pour les variables automatiques ou locales non statiques, leur durée de vie est limitée à leur portée. En d'autres termes, ces variables sont automatiquement détruites une fois leur portée terminée.
Dans l'extrait de code donné, la variable x est déclarée comme variable locale non statique , ce qui signifie que sa durée de vie est liée à sa portée. Lorsque la portée interne se termine, x cesse d'exister, laissant le pointeur p pointant vers un emplacement qui n'est plus valide.
Par conséquent, tenter d'accéder à la valeur de x via p est un comportement indéfini. Le compilateur peut ou non allouer de la mémoire à x au-delà de sa portée, conduisant à des résultats imprévisibles. Il est donc crucial d'éviter d'accéder à des variables dont la portée est terminée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!