- Stack around the variable 'Tab' was corrupted

Résolu/Fermé
Gretyzde Messages postés 97 Date d'inscription vendredi 1 août 2014 Statut Membre Dernière intervention 1 avril 2016 - 2 janv. 2015 à 10:56
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 - 2 janv. 2015 à 12:59
Bonjour,


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.
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
2 janv. 2015 à 12:51
Bonjour,
@jwTdd: ton tableau est inutile vue que tu n'utilises que la position 10 .
il n'y a pas de position 10 on est hors tableaux
à bientôt
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
2 janv. 2015 à 12:15
'lut.
Tab[10]
est hors du tableau, vu qu'il n'a que 10 éléments, son maximum est donc
Tab[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émentes
ind
mais ne t'en sers que dans la condition du while, tu devrais plutôt faire
Tab[ind] = nb;
, plus loin
printf("%d\n", Tab[ind]);
et ne faire
ind++;
qu'à la fin de ta boucle.
0
Gretyzde Messages postés 97 Date d'inscription vendredi 1 août 2014 Statut Membre Dernière intervention 1 avril 2016 2
2 janv. 2015 à 12:26
Problème résolu, merci beaucoup!
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
Modifié par sambia39 le 2/01/2015 à 12:58
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 directement
 Tab[10]= nb; 
est faire du hors limite et si ton compilateur est assez sensible tu devrais avoir un message d'erreur de ce type
array subscript is above array bounds [-Werror=array-bounds] 
à la ligne
 Tab[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.
0
Gretyzde Messages postés 97 Date d'inscription vendredi 1 août 2014 Statut Membre Dernière intervention 1 avril 2016 2
2 janv. 2015 à 12:56
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.
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
2 janv. 2015 à 12:59
 ++i < 10 
au lieux de
 i++ <= 10 
0