Débordement mémoire
Résolu
dx3d
Messages postés
72
Statut
Membre
-
dx3d Messages postés 72 Statut Membre -
dx3d Messages postés 72 Statut Membre -
Bonjour, lors de ma révision pour mes partiels qui approche j'ai rencontré quelques difficultés par ci et la, maintenant j'aimerais savoir si je me goure pas trop dans se que je fais.
En jetant un oeil aux examens des années passé je suis tombé sur quelques questions concernant le débordement en mémoire où il fallait décrire et corriger les débordement mémoire possible sur certains codes.
Code 1 :
Code 2 :
Dans les deux cas ici je vois que si on met un n > taille(tableau) on va lire au dessus de la mémoire allouer au tableau et on va avoir des résultats corrompus. Donc il faudrait limiter n à la taille du tableau, est ce bien cela ?
En jetant un oeil aux examens des années passé je suis tombé sur quelques questions concernant le débordement en mémoire où il fallait décrire et corriger les débordement mémoire possible sur certains codes.
Code 1 :
int computeAverage(float * t, int n) {
int i = 0;
float sum = 0.0;
for (i=0; i<=n; i++) {
sum = sum+t[i];
}
return sum/n;
}
Code 2 :
int findMin(int t[], int n) {
int i;
int min;
min = t[0];
while (i<n) {
if (t[i]<min) {
min = t[i];
} i
=
i+1;
}
return min;
}
Dans les deux cas ici je vois que si on met un n > taille(tableau) on va lire au dessus de la mémoire allouer au tableau et on va avoir des résultats corrompus. Donc il faudrait limiter n à la taille du tableau, est ce bien cela ?
A voir également:
- Débordement mémoire
- Mémoire vive - Guide
- RAM : type, format, CAS, vitesse, tout sur la mémoire vive - Guide
- C'est un secret bien gardé : ce réglage d'expert peut doper les performances de votre PC - Guide
- Nettoyer memoire iphone - Guide
- Gmail memoire insuffisante - Guide
1 réponse
Note :
Déjà, le Code1 est faux. Il faut retourner sum/(n+1); puisque tu fais une boucle for de 0 à n compris.
Dans le code2, il manque un i=0; quelque part...
Sinon pour répondre à ta question, dans le premier cas, il faut un tableau de taille n+1 au minimum (puisque tu accèdes à la case t[n]).
Pour l'autre, il suffit que ton tableau soit de taille n.
Cdlt,
Déjà, le Code1 est faux. Il faut retourner sum/(n+1); puisque tu fais une boucle for de 0 à n compris.
Dans le code2, il manque un i=0; quelque part...
Sinon pour répondre à ta question, dans le premier cas, il faut un tableau de taille n+1 au minimum (puisque tu accèdes à la case t[n]).
Pour l'autre, il suffit que ton tableau soit de taille n.
Cdlt,
Bonne soirée !
Avant de créer ton tableau, il faut indiquer sa taille. Tu as donc la taille à ce moment là. Et c'est cette taille que tu envoies en argument de tes fonctions.
Par exemple :
Note : sizeof donne bien la taille du tableau. Attention à ne pas confondre avec les pointeurs...
Si tu ne connais pas la taille avant le lancement du programme, alors on créé généralement un pointeur et on alloue sa taille lors de l'exécution. Encore une fois c'est cette taille que tu enverras en argument de ta fonction.
Exemple :