- 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
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
A voir également:
- Array subscript is above array bounds
- Samsung galaxy tab a9+ avis - Accueil - Tablettes
- Tab clavier ✓ - Forum Windows
- Quel est la touche tab sur le clavier ? ✓ - Forum souris / Touchpad
- Touche tab - Forum LibreOffice / OpenOffice
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.
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
2 janv. 2015 à 12:15
'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.
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
2 janv. 2015 à 12:26
Problème résolu, merci beaucoup!
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
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
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.
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
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.
Merci pour tes explications, j'y vois beaucoup plus clair désormais.
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
2 janv. 2015 à 12:59
++i < 10au lieux de
i++ <= 10
2 janv. 2015 à 12:51
@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