π
<-

Bug incompréhensible dans un programme C compilé en .EXE

Assembleur, Axe, C/C++, ICE...

Re: Bug incompréhensible dans un programme C compilé en .EXE

Unread postby rentech7289 » 16 Aug 2021, 19:40

Bonjour
Exact: en C, malloc sert à allouer de la mémoire, free à libérer cette même mémoire; en C++: new et delete. Quand on utilise malloc pour une variable, on utilise free sur cette même variable dès qu'elle est inutile. La raison est que les langages C, à la différence de python ou Java, ne gèrent pas la mémoire. Ce qui fait que tant que le programme n'est pas terminé elle est perdue. D'autre part, un plantage du programme peut ne pas récupérer cette mémoire, il faut alors redémarrer la machine; C'est la fameuse 'fuite de ressources mémoire' qui peut interrompre un programme par manque de mémoire...
D'autre part, il faut ajouter qu'une compilation vers un fichier executable donne des résultats différents en fonction de la machine. Exemple: avec un même OS et les même programmes, deux ordinateurs identiques exécuteront différemment un programme de jeux qui fait appel à la carte graphique si elles ont un logiciel différent. La raison est la suivante: les exécutables C sont en langage machine, pas en bytecode comme python ou Java qui sont restent interprétables si l"interpréteur/machine virtuelle est compatible. En un mot, un même fichier exécutable peut tourner sur deux machines qui utilisent le mêmes langage machine pour ce même fichier.
User avatar
rentech7289
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Level up: 66.4%
 
Posts: 107
Joined: 16 Aug 2021, 02:40
Location: Lorraine luxembourgeoise
Gender: Male
Calculator(s):
MyCalcs profile

Re: Bug incompréhensible dans un programme C compilé en .EXE

Unread postby Bobb » 20 Aug 2021, 10:20

Oui, les machines sur lesquelles le programme fonctionne ne doivent pas avoir la même gestion de mémoire que sur Windows, et le programme ne bug pas.

Tous mes programmes sont disponibles ici

↳ Testez mon simulateur Android sur Ti-83 Premium CE et / ou Édition Python
Jetez un coup d'oeil à mon langage de programmation interprété Neon.

Image
User avatar
BobbProgrammeur
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 0.7%
 
Posts: 322
Joined: 19 Apr 2020, 12:37
Location: Morbihan
Gender: Male
Calculator(s):
MyCalcs profile
Class: ENS Rennes info

Re: Bug incompréhensible dans un programme C compilé en .EXE

Unread postby rentech7289 » 01 Sep 2021, 04:12

Ce n'est pas une question liée typiquement à Windows ou à un OS particulier. Deux machines matériellement identiques, avec les mêmes programmes, mais avec des mises à jour différentes peuvent fournir un résultat different pour le même exécutable. Ce qui joue ici c'est toute la partie logicielle de la machine et non tel ou tel programme. De plus, il suffit parfois de compiler un code source avec un autre compilateur pour obtenir ce type de résultat...
User avatar
rentech7289
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Level up: 66.4%
 
Posts: 107
Joined: 16 Aug 2021, 02:40
Location: Lorraine luxembourgeoise
Gender: Male
Calculator(s):
MyCalcs profile

Re: Bug incompréhensible dans un programme C compilé en .EXE

Unread postby Bobb » 29 Jan 2022, 14:15

Merci pour tous ces conseils, de toute façon, je vais réécrire mon programme entièrement et le faire fonctionner autrement. Tous vos conseils vont m'être utiles maintenant, pour ne pas refaire les mêmes erreurs.

Par contre je me posais encore une question.
Dès fois, j'utilise des tableaux de char à double niveau de pointeur : des char** quand que veux stocker différentes chaînes de caractères à la suite. En gros c'est pour faire comme en python : ['salut', 'comment', 'ca', 'va'].

Sauf que si je fais juste un free(), ça va vider le premier tableau, mais pas les chaînes en elle-même. Ca va vider juste l'endroit où sont stockés les adresses des char* mais pas les char* en eux mêmes.

Dans ce cas, je fais quoi pour tout vider ? Une boucle de free ?

Tous mes programmes sont disponibles ici

↳ Testez mon simulateur Android sur Ti-83 Premium CE et / ou Édition Python
Jetez un coup d'oeil à mon langage de programmation interprété Neon.

Image
User avatar
BobbProgrammeur
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 0.7%
 
Posts: 322
Joined: 19 Apr 2020, 12:37
Location: Morbihan
Gender: Male
Calculator(s):
MyCalcs profile
Class: ENS Rennes info

Re: Bug incompréhensible dans un programme C compilé en .EXE

Unread postby Adriweb » 29 Jan 2022, 14:16

Une boucle, oui, pour free chacun des strings d'abord, puis l'array a la fin.

MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)
My calculator programs
Mes programmes pour calculatrices
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 79.7%
 
Posts: 14817
Images: 1131
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
Twitter: adriweb
GitHub: adriweb

Re: Bug incompréhensible dans un programme C compilé en .EXE

Unread postby Bobb » 25 Mar 2022, 22:04

Maintenant que j’ai ,,abandonné’’ ce programme ou en tous cas que je l’ai entièrement reprogrammé d’une autre manière bien plus efficace (voir : https://tiplanet.org/forum/viewtopic.php?f=12&t=25550) , et que j’ai progressé en C, je pense pouvoir donner la raison finale du but que j’avais.

En fait quand je tapais un calcul, au lieu de m’afficher le bon résultat, le programme affichait une ribambelle de caractères abracadabrants. A mon avis, c’est dû au fait que quand j’allouais de la memoire pour stocker mes chaînes de caractères, je n’initialisais pas la valeur de chaque élément du tableau de char à 0. Du coup la chaine de carcateres contenait encore les octets de sa précédente allocation. Du coup il faut appeler la fonction memset après l’allocation.
Ça peut peut être aider des gens qui se retrouveraient dans le même cas que je l’ai été.

Tous mes programmes sont disponibles ici

↳ Testez mon simulateur Android sur Ti-83 Premium CE et / ou Édition Python
Jetez un coup d'oeil à mon langage de programmation interprété Neon.

Image
User avatar
BobbProgrammeur
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 0.7%
 
Posts: 322
Joined: 19 Apr 2020, 12:37
Location: Morbihan
Gender: Male
Calculator(s):
MyCalcs profile
Class: ENS Rennes info

Previous

Return to Langages alternatifs

Who is online

Users browsing this forum: ClaudeBot [spider] and 10 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1081 utilisateurs:
>1059 invités
>16 membres
>6 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)