- 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.
A voir également:
- Stack around the variable was corrupted
- Blue stack - Télécharger - Émulation & Virtualisation
- Servicing stack c'est quoi - Forum Windows
- Servicing Stack 10.0.19041.841 - Forum Windows 10
- Vba range avec variable ✓ - Forum VB / VBA
- Blue stack avis ✓ - Forum Logiciels
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.
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.
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 (
Tu incrémentes
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
indmais 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.
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
le mieux est d'écrire comme ceci exemple
à bientôt
Toute connaissance est une réponse à une question.
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.
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.
Merci pour tes explications, j'y vois beaucoup plus clair désormais.
@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