- Stack around the variable 'Tab' was corrupted
Résolu
Gretyzde
Messages postés
97
Date d'inscription
Statut
Membre
Dernière intervention
-
sambia39 Messages postés 610 Date d'inscription Statut Membre Dernière intervention -
sambia39 Messages postés 610 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'ai, pour un exercice, codé ceci:
Le résultat est correct mais le message suivant apparaît: "Run-Time Check Failure #2 - Stack around the variable 'Tab' was corrupted."
Pourrais-je avoir une explication s'il vous plaît?
Merci d'avance.
j'ai, pour un exercice, codé ceci:
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
int ind = 0;
int Tab[10];
int nb=3;
do
{
Tab[10] = nb;
ind++;
nb*=2;
printf("%d\n", Tab[10]);
}
while (ind<=10);
system("pause");
}
Le résultat est correct mais le message suivant apparaît: "Run-Time Check Failure #2 - Stack around the variable 'Tab' was corrupted."
Pourrais-je avoir une explication s'il vous plaît?
Merci d'avance.
4 réponses
-
Salut, ton tableau est inutile vue que tu n'utilises que la position 10 et puis il vaut mieux initialiser tout le tableau là tu as mis une valeur a la position 10 mais le reste n'a pas été definit.
Tu peux tout initialiser en même temps que la declaration, exemple:
int Tab[10]={0};
PS: prefères int main(void) à void main(void), le second est hors norme tu auras tôt ou tard des problèmes avec ça. -
'lut.
Tab[10]
est hors du tableau, vu qu'il n'a que 10 éléments, son maximum est doncTab[9]
lors de l'accès.
De plus tu écris toujours dans le même élément du tableau, je dirais que tu devrais remplir le tableau des nombres souhaités (nb
); et je présume que c'est l'énoncé de ton exo.
Tu incrémentesind
mais ne t'en sers que dans la condition du while, tu devrais plutôt faireTab[ind] = nb;
, plus loinprintf("%d\n", Tab[ind]);et ne faireind++;
qu'à la fin de ta boucle. -
Problème résolu, merci beaucoup!
-
Bonjour, je vais compléter un peut le post de @gravgun
avant tout le résultat qui te sort n'est pas correcte même si tu penses que le résultat de sortie est correct et de plus le compilateur à raison de te sortir cette erreur parce que tu as fait une erreur de programmation. Tu utilises pas correctement ton tableau pour écrire en mémoire plus clairement tu écrases l'adresse de mémoire tes hors limites comme dit @gravgun car quand tu déclares un tableau de 10 éléments en réalité ton indice max qui va contenir les 10éme élément est 10-1 donc 9 ( mais, le tableau contient bien 10 éléments) et pourquoi le résultat n'est pas correct tout simplement parce que tu ne te déplace pas dans ton tableau pour stocker le résultat exemple à l'indice 1 de ton tableau il y a aucune valeur faire directementTab[10]= nb;
est faire du hors limite et si ton compilateur est assez sensible tu devrais avoir un message d'erreur de ce typearray subscript is above array bounds [-Werror=array-bounds]
à la ligneTab[10]=nb;
le mieux est d'écrire comme ceci exemple#include <stdio.h> #include <stdlib.h> int main( void ){ unsigned int i = 0; unsigned int r = 3; unsigned int iTab[10]; do{ *(iTab+i) = r; r *= 2; printf("iTab[%3d]\t= %d\n", i, *(iTab+i) ); }while( ++i < 10 ); return( EXIT_SUCCESS ); }
à bientôt
Toute connaissance est une réponse à une question.-
Re! J'ai testé ton code en le collant sous visual studio mais la même erreur (à propos de iTab corrupted) j'ai oublié de mentionner quelque chose qui pourrait être important, je travaille sous une vieille version de visual studio qui fonctionne sous Windows XP.
Merci pour tes explications, j'y vois beaucoup plus clair désormais. -
-