(Débutant) Bug ou Erreur de ma part

Résolu
igeek96 Messages postés 143 Date d'inscription   Statut Membre Dernière intervention   -  
igeek96 Messages postés 143 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je débute en programmation en C et j'ai fait un petit "programme" pour m'entrainer et il se trouve qu'il y a quelque chose d'inéxplicable… Voyez :

#include <stdio.h>
#include <stdlib.h>

long sommeTableau(long tableau[], long tailleTableau);

int main(int argc, char *argv[])
	{
	long factures[3] = {10 , 20 , 0};
	long somme = 0, a = 0;
	
	somme = sommeTableau(factures, 3);
	
	printf("\n\n%ld\n\n", somme);
	
	return 0;
	}
	
long sommeTableau(long tableau[], long tailleTableau)
	{
	long somme = 0, i = 0;
	
	for (i = 0 ; i <= tailleTableau ; i++)
		{
		somme = somme + tableau[i];
		}
	
	return somme;
	}


Dans ce code donc, quand j'enlève le bout de code en gras, ca ne marche pas et la fonction printf renvoie -1073742802 (une adresse je pense), mais quand je le met, le code marche parfaitement.

Est ce que quelqu'un pourrait m'éclairer sur le sujet? Meerci!

2 réponses

kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
Salut,

Si tu fais
i <= tailleTableau
tu fais un dépassement de tableau car tu vas de 0 à 3 inclu (ça fait quatre passages)
Il faudrait que tu fasses:
i < tailleTableau 


Pour explications:
Il y a effectivement une raison qui ferait que si tu enlèves a=0 de ton code, le bug devient visible.
C'est au moment de la création des variables locales dans la pile, a est alloué à la suite du tableau (il y a des chances que somme ne soit pas alloué dans la pile par contre mais juste dans un registre du processeur).
Bref en gros a est alloué juste à la suite de ton tableau. Ce qui fait que si tu débordes d'un cran de ton tableau, tu tombes sur la valeur de a qui est zero. C'est à dire que si tu fais facture[3] tu tombes finalement sur la valeur de a. Et donc l'addition supplémentaire n'a pas d'effet. Si tu ne mets pas a, tu tombe sur une valeur qui peut être une instruction ou n'importe quoi...donc tu fais une addition ahurissante.
0
igeek96 Messages postés 143 Date d'inscription   Statut Membre Dernière intervention   45
 
AH oui!! Ok merci bcp! Des fois un petit caractère change tout…
0