Problèmes diverses
zam
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je vous expose mon problème. Je suis actuellement en train de créer un programme C pour mon université. Ce n'est pas le 1er programme que je fais, ni le plus dur. Ma question ne porte pas sur un détail précis mais j'espérais pouvoir m'appuyer sur votre expérience. Voilà, mon programme saute des instructions. Je demande des affichages qu'il "oublie". Après plein de vérifications sur la fermeture d'accolades, des parenthèses ou autres deux points oubliés, rien, pas une erreur apparente, pas même à la compilation.
Deuxième constatation, j'effectue a un moment une vérification sur la diagonale d'une matrice. Si une valeur est égale à 0, la fonction retourne 1. Cette fonction retournait toujours 0, j'ai donc mis des printf sur les valeurs ciblées et ils me retournent effectivement que des valeurs sont égales à 0, donc le programme devrait retourner 1, mais non. Encore plus bizarre, quand j'appelle cette fonctionp lus loin dans mon programme, avec la même matrice, elle me donne toujours le bon résultat. J'ai vérifié, la matrice est bien déclarée et remplie avant le 1er appel.
Enfin voilà, il y a ces erreurs plus d'autres qui sont pour moi dues à un bugg, même après réa allumage de l'ordi. Mais si ce problème, par expérience, parle à quelqu'un, je serais ravi qu'il m'éclaire.
Je vous expose mon problème. Je suis actuellement en train de créer un programme C pour mon université. Ce n'est pas le 1er programme que je fais, ni le plus dur. Ma question ne porte pas sur un détail précis mais j'espérais pouvoir m'appuyer sur votre expérience. Voilà, mon programme saute des instructions. Je demande des affichages qu'il "oublie". Après plein de vérifications sur la fermeture d'accolades, des parenthèses ou autres deux points oubliés, rien, pas une erreur apparente, pas même à la compilation.
Deuxième constatation, j'effectue a un moment une vérification sur la diagonale d'une matrice. Si une valeur est égale à 0, la fonction retourne 1. Cette fonction retournait toujours 0, j'ai donc mis des printf sur les valeurs ciblées et ils me retournent effectivement que des valeurs sont égales à 0, donc le programme devrait retourner 1, mais non. Encore plus bizarre, quand j'appelle cette fonctionp lus loin dans mon programme, avec la même matrice, elle me donne toujours le bon résultat. J'ai vérifié, la matrice est bien déclarée et remplie avant le 1er appel.
Enfin voilà, il y a ces erreurs plus d'autres qui sont pour moi dues à un bugg, même après réa allumage de l'ordi. Mais si ce problème, par expérience, parle à quelqu'un, je serais ravi qu'il m'éclaire.
A voir également:
- Problèmes diverses
- Appliquez à tous les paragraphes du document à télécharger, à l’exception des titres et des sous-titres, la mise en forme suivante : chaque paragraphe doit être espacé de 0,42 cm ou 12 pt du paragraphe qui suit les textes ne doivent pas être en retrait à droite et à gauche après ces modifications, sur quelle page se trouve le titre « la cheminée » dans le chapitre « informations diverses » ? - Guide
- Après ces modifications, sur quelle page se trouve le titre « la cheminée » dans le chapitre « informations diverses » ? ✓ - Forum LibreOffice / OpenOffice
- Numérotation titres perturbé - Forum Word
- Supertoinette forum discussions diverses - Forum Mail
- Bonjour les sous titres n'apparaissent plus malgré CC et cha ✓ - Forum YouTube
comme par magie, j'ai copié mon code dans un autre fichier.c je l'ai exécuté et hop aucune erreur. Miracle.. Mais j'ai récupéré d'autres erreurs, dont celle là que je te fais parvenir.
A chaque itération, tab[j] prend la valeur de somme, chose qui n'est absolument pas marquée dans ce code. Quand je ré-ouvre ce code dans un autre fichier.c, miracle, cette erreur disparait. Je perds foi en mon ordi..
Ensuite sur ton code :
float *tab;
tab=calloc(taille,sizeof(float));
Pourquoi passer par un pointeur ?
D'autant qu'il y a une fuite de mémoire par la suite : tab=(*s).reponses;
Au plus simple : float tab;
Et tab=(*s).reponses;
Sinon, ton problème n'est pas bien clair. Je te conseille de faire le ménage au niveau de tes fichiers.c, de tout bien fermer, de tout supprimer les fichiers objets. Et de recompiler tout ça proprement.
Cdlt,
J'alloue mes matrices avec une taille n, qui donnera une matrice carrée pour la première. Je crois donc nécessaire de passer par un *tab pour stocker *reponses, non?
Que veux-tu dire par "fuite de mémoire"?
Pour ce qui est du reste, une chose est sûre, ça ne semble pas venir du code. A un moment donné, j'ai voulu décomposer mon code c en plusieurs codes c en les incluant dans le code principal. C'est à partir de là que ça a bugge, mais c'est bizarre car j'ai déjà fait ça plusieurs fois, avec les ifndef et la syntaxe qui va avec.
Je rectifie.
C'est nécessaire d'avoir tous les éléments pour donner une réponse précise.
Pour la fuite mémoire, tu fais :
float *tab;
tab=calloc(taille,sizeof(float));
Ce qui signifie que tu crées une zone mémoire dans le heap et que tab pointe dessus.
tab=(*s).reponses;
Là, tu écrases l'adresse mémoire pointant vers la zone allouée. Mais cette zone existe toujours puisque tu n'as pas utilisé de free(tab)...
Pour le reste, il faut savoir qu'en C, ce n'est pas parce qu'un code fonctionne correctement, qu'il compile sans erreur qu'il n'en contient pas... C'est d'ailleurs souvent pour cette raison, qu'on a l'impression que son ordinateur a des comportements étranges...