Maison > développement back-end > C++ > le corps du texte

En langage C, le débordement de tas et le débordement de pile font référence au moment où un programme dépasse ses limites allouées lors de l'utilisation de la mémoire tas ou de la mémoire pile.

王林
Libérer: 2023-09-11 13:41:02
avant
1383 Les gens l'ont consulté

在C语言中,堆溢出(Heap overflow)和栈溢出(Stack overflow)是指程序在使用堆内存或栈内存时超出了其分配的边界

Heap overflow

Heap est utilisé pour stocker des variables dynamiques. C'est une zone de mémoire de processus. malloc(), calloc(), resize() toutes ces fonctions intégrées sont couramment utilisées pour stocker des variables dynamiques.

Quand un débordement de tas se produit -

A) Si nous allouons une variable dynamique à grand nombre -

int main() {
   float *ptr = (int *)malloc(sizeof(float)*1000000.0));
}
Copier après la connexion

B) Si nous allouons de la mémoire en continu et ne la libérons pas après utilisation.

int main() {
   for (int i=0; i<100000000000; i++) {
      int *p = (int *)malloc(sizeof(int));
   }
}
Copier après la connexion

Stack Overflow

La pile est une structure de données dernier entré, premier sorti. Il est utilisé pour stocker les variables locales utilisées dans les fonctions. Les paramètres sont transmis via cette fonction et son adresse de retour.

Si le programme consomme plus d'espace mémoire, un débordement de pile se produira en raison de la taille limitée de la pile dans la mémoire de l'ordinateur.

Un débordement de pile se produit lorsque-

C) Si une fonction est appelée de manière récursive par elle-même un nombre infini de fois, alors la pile ne pourra pas stocker un grand nombre de variables locales, donc un débordement de pile se produit-

void calculate(int a) {
   if (a== 0)
      return;
      a = 6;
      calculate(a);
}
int main() {
   int a = 5;
   calculate(a);
}
Copier après la connexion

D) Si un grand nombre de variables locales sont déclarées ou de grandes dimensions sont déclarées. Tableau ou matrice, peut provoquer un débordement de pile.

int main() {
   A[20000][20000]
}
Copier après la connexion

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!

source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal