Variables qui se vide toute seule

Variables qui se vide toute seule - C++ - Programmation

Marsh Posté le 13-09-2005 à 14:20:04    

J'ai un problème assez mystérieux dans mon programme. En vérifiant certaines variables en mode déboguage, j'ai remarqué qu'elles étaient mise à zéro pour aucune raison valable. Car en effet, elles se vide à un moment où je ne fais aucun traitement dessus. En fait ces variables se vident dans des fonctions où elles ne figurent même pas :p (Je précise que ce sont des variables membres d'un objet global)
 
Voilà, je ne donne pas d'illustration de code pour l'instant car ce que je voudrais savoir, c'est si à première vue c'est un problème connu. Est-ce que ça vient du compilateur (j'utililse Visual C++)? D'une surcharge quelconque? C'est un programme assez complexe, je me souviens avoir agrandit la mémoire allouée pour les headers précompilés.

Reply

Marsh Posté le 13-09-2005 à 14:20:04   

Reply

Marsh Posté le 13-09-2005 à 14:23:12    

Par défaut, VC met les variables en zéro en mode débug et en indéterminé en mode Release (souvent 0xC0C0C0C0).
 
Aïe, je me vide... Vite, des WC !


Message édité par christophe_d13 le 13-09-2005 à 14:23:55

---------------
http://www.ikalizer.fr
Reply

Marsh Posté le 13-09-2005 à 14:51:04    

Mouais sans rire, ces variables se vident. Mais bien sûr avant ca elle étaient pleine...
En mode release ca me fait des bugs vu que ma variable est à 0 alors qu'elle devrait contenir une valeure non nulle.

Reply

Marsh Posté le 13-09-2005 à 15:41:02    

Bon d'accord j'aurais dût appeler ce sujet:
 
Variable qui se met à zéro toute seule. Vide n'est pas le bon terme ok. Maintenant mon sujet fait pas sérieux :/
 
N'empêche que je cherche là je trouve pas pourquoi ça fait ça c'est invraisemblable! Personne n'a une idée lumineuse?


Message édité par bkadoum le 13-09-2005 à 15:41:57
Reply

Marsh Posté le 13-09-2005 à 15:54:46    

Je mes un bout de code pour vous chauffer:
 

Code :
  1. void UpdateCharacter(Character *pCharacter)
  2. {
  3. int i;
  4. Str RequestString;
  5. RequestString = (Str)"SELECT * FROM CharCombat WHERE MinCS <= " + pCharacter->GetStat2(COMBAT_SPEED)->score + " AND MaxCS >= " + pCharacter->GetStat2(COMBAT_SPEED)->score;
  6. SQLExecDirect(DataBase.Gethstmt(0), (SQLCHAR *)RequestString.Get(), SQL_NTS);
  7. SQLFetch(DataBase.Gethstmt(0));
  8. SQLGetData(DataBase.Gethstmt(0), 4, SQL_C_SLONG, &pCharacter->GetCombat()->MaxDistance, 0, NULL);
  9. for (i = 0; i < TOTAL_COMBAT_PHASE; i++)
  10.  SQLGetData(DataBase.Gethstmt(0), i + 5, SQL_C_SLONG, &pCharacter->GetCombat()->action[i], 0, NULL);
  11. SQLFreeStmt(DataBase.Gethstmt(0), NULL);
  12. }


 
Cette fonction met à jour des variables de mon objet Character depuis une base de donnée.
La variable qui est mise à zéro n'est pas traitée dans cette fonction et ne figure pas dans le code (c'est ça le plus bizarre) mais elle fait partie d'une structure membre de la classe Character. Apparament d'après mes tests, la variable se met à zéro au moment où j'appel SQLFetch.

Reply

Marsh Posté le 13-09-2005 à 16:05:36    

ca serait pas un débordement qui écrirait dans ta mémoire à l'emplacement de ta variable par hasard ?


Message édité par blackgoddess le 13-09-2005 à 16:05:57

---------------
-( BlackGoddess )-
Reply

Marsh Posté le 13-09-2005 à 16:35:57    

blackgoddess a écrit :

ca serait pas un débordement qui écrirait dans ta mémoire à l'emplacement de ta variable par hasard ?


en tout cas ça y ressemble...[:dawa]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-09-2005 à 17:37:22    

C'est bien vu. Ma variable se trouve être justement déclarée en dessous de la structure Combat, qui est traitée dans la fonction. J'ai jeté un oeuil à la structure Combat et ai remarqué que action est en fait un tableau de booléan, je le déclare en entier et ça marche maitenant.
Un grand merci voilà un moment que je piétinais sur ce bug :)


Message édité par bkadoum le 13-09-2005 à 17:37:43
Reply

Marsh Posté le 14-09-2005 à 12:03:43    

C'est quasiment illisible, mais il ne manquerait pas des tests de retour de fonctions dans ton code? Ca fait beaucoup de VOID je trouve...  :sarcastic:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed