je me remets à jour en C et histoire de bien m'assurer que je n'ai pas de lacune fondamentales, j'ai repris le cours à zéro.
J'en suis à réaliser le TP du pendu, sauce maison et je suis confronté depuis le début à une erreur en fin d'exécution du process.
J'utilise Code::Blocks, qui niveau debug ne vaut pas Visual Studio je trouve, mais bon... j'en profite aussi pour me familiariser avec un nouvel environnement.
J'ai cru comprendre que mon problème venait de l'allocation mémoire (ou plutôt de la désallocation).
J'ai donc créé un autre projet à côté en ne gardant que le code d'allocation / affichage / désallocation pour me concentrer sur l'essentiel et ai réussi à obtenir un résultat qui ne plante pas...
J'ai donc transposé ça dans le projet complet d'origine, qui plante toujours...
Qu'à cela ne tienne, j'ai dupliqué ce projet et supprimé manuellement ce qui devait me ramener vers le projet créé à côté.
J'ai désormais 2 projets : tests et tests2 dont le contenu est strictement identique :
Et pourtant, l'un fonctionne :
et pas l'autre :
Comme vous l'avez remarqué, niveau compilation je suis reparti de zéro : suppression de tous les fichiers autre que projet, .c, .h (et le fichier .txt ouvert par le programme), puis F9 qui compile et exécute.
Après ça, j'obtiens ceci dans Winmerge :
Je peux fournir le code intégral, mais comme vous le voyez c'est le même sur les deux projets...
Des idées ?
Merci d'avance pour vos retours
Raph
ps. le copier/coller d'image ne fonctionne pas... ça me génère un sujet avec l'avatar à la place des screenshots...
- Edité par raphaelmollon 27 janvier 2021 à 17:14:21
Essaies de compiler tes deux codes avec les options -Wall et -Wextra si tu peux le faire (vive les IDE). Si c'est un problème de free(), affiches le pointeur avec le format %p juste après le malloc() et juste avant le free() pour voir si c'est identique. @n'importe qui: existe-til une fonction de comparaison de fichiers sur Windows pour s'assurer que les deux fichiers sont bien identiques? Pas un ; de trop en quelque part?
Le Tout est souvent plus grand que la somme de ses parties.
Personne ne recommande d'utiliser sizeof(char), je ne suis pas le seul. Même au temps de C89, voire avant, ça valait toujours 1. Ça n'est pas près de changer. Pour la fonction de comparaison, c'était pour comparer tes deux fichiers que tu disais identiques. Moi, je triche car j'ai Cygwin64 sur mon Windows et je peux utiliser le programme diff de Linux. Heureux de savoir que tu ne te pendras pas.
Le Tout est souvent plus grand que la somme de ses parties.
@PierrotLeFou: oui, il y a comp ou fc -- jamais utilisés. J'ignore la différence entre les deux.
Edit: apparemment, fc permet une comparaison binaire, et pas comp
@raphaelmolon: si la taille d'un char change un jour, ce ne sera pas sur l'os que tu utilises. Alors autant oublier le sizeof(char), qui alourdit non pas le code (le compilateur s'en moque), mais la lecture du code.
- Edité par edgarjacobs 27 janvier 2021 à 19:33:28
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Bah techniquement la «taille» d'un char peut changer, mais par définition sizeof(char) (et signed char et unsigned char) vaudra toujours 1. La «taille» d'un char, au sens longueur en bit est donné par CHAR_BIT qui vaut au minimum 8 et dépend de l'implémentation.
On a bien sizeof(int) = sizeof(long) aujourd'hui (en tout cas sur mon windaube). J'imagine que ça n'a pas toujours été le cas, sinon aucun intérêt d'avoir deux types. Donc pourquoi pas char
Je confirme que c'est du paluchage de neurones, mais puisque Pierrot nous a lancés sur le sujet
Pour le reste, je confirme que pour comparer deux fichiers, beaucoup plus intuitif et ergonomique que diff, Winmerge est une excellente solution et peut même depuis quelques temps comparer jusqu'à 3 fichiers d'un coup.
On a bien sizeof(int) = sizeof(long) aujourd'hui (en tout cas sur mon windaube). J'imagine que ça n'a pas toujours été le cas, sinon aucun intérêt d'avoir deux types. Donc pourquoi pas char
Je confirme que c'est du paluchage de neurones, mais puisque Pierrot nous a lancés sur le sujet
Pour le reste, je confirme que pour comparer deux fichiers, beaucoup plus intuitif et ergonomique que diff, Winmerge est une excellente solution et peut même depuis quelques temps comparer jusqu'à 3 fichiers d'un coup.
Sur les systèmes 16 bits (Windows 3) on avait souvent 8 bits pour les char, 16 bits pour short et int, 32 bits pour long. Sur les systèmes 32 bits on avait souvent 8 bits pour les char, 16 bits pour short, 32 bits pour int et long. Sur les systèmes 64 bits on a souvent 8 bits pour les char, 16 bits pour short, 32 bits pour int, 32 ou 64 bits pour long.
Ce que plusieurs personnes ont écrit, mais pas tous les lecteurs ont compris, c'est que sizeof(char) a une valeur fixée par la norme à 1. Ça ne dépend pas de l'implémentation. En langage C, sizeof(char) vaut 1, sinon ce n'est pas du C. C'est pareil en C++ à ma connaissance.
- Edité par Marc Mongenet 28 janvier 2021 à 1:27:32
Le meilleur test est de le faire soi-même sur son système comme j'ai déjà fait. Pour moi, int et long valent 4 octtets sur un processeur 64-bits. sizeof(long long) vaut 8. Et sizeof(char *) vaut 8. J'ai bien trouvé comp et fc sur mon système mais Winmerge n'est pas un produit Windows, je veux dire Microsoft ... J'irai voir ça de plus près.
Le Tout est souvent plus grand que la somme de ses parties.
le grand malheur de celui-là c'est qu'il n'existe que pour Windows et sur Linux je n'ai pas encore trouvé d'utilitaire équivalent qui soit aussi agréable à utiliser.
Il fait partie de mes chouchous avec notepad++
TP Pendu
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Bonhomme !! | Jeu de plateforme : Prototype.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.