CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

C: comportement étrange en debug/release

dnob700
dnob700
Niveau 10
20 novembre 2004 à 23:41:10

bon, le problème que je vais exposer concerne tout mon projet donc je ne peut pas mettre mon code source tel quel.

si personen ne voit de solution à mon problème je l´uploaderait après.

Bon, c´est toujours mon programme de fractales : j´ai écrit rapidement un ensemble de fonction pour le traitement des nombre à virgule flottant en précision arbitraire ( depuis le temps que je voulais le faire en C) pour améliorer la précision de mon programme.

Mais c´est là que c´est étrange :
en mode debug, le résultat graphique n´est pas du tout celui que j´attend, mais on peut imputer ça à mon algorithme qui est peut-être mauvais, masi ce qui est bizarre, c´est que lorsque mon programme à fini de dessiner la fractale et juste avant de quitter la fonction qui s´en charge, vc me fait cette erreur : " Run-Time Check Failure #2 - Stack around the variable ´zrt´ was corrupted."

alors j´ai essayer de lancer la fonction dans un autre thread en augmentant la taille de la pile qusqu´à 20Mo ( je fait des appel de fonction assez lourd dans cette fonction) mais ça ne change rien ( d´ailleurs c´est quoi la tailel par défaut de la pile ? ).

et là ou c´est encore plus bizarre, c´est qu´en mode release, cette erreur n´aparait plus ( logique, vu qu´il n´y a plus de runtime check bidule je suppose) mais de toute façon plus rien n´apparait, plus d fractale du tout.

Est ce que c´est possible que l´erreur sur la pile se fasse dès le début de la fonction, mais que vc la corrige ( donc la fonction marche en debug) et me signale à la fin qu´il y a eut un problème ?

enfin, je ne vois pas du tout de quoi ça peut venir.

si qqn à une idée, ou a déjà rencontrer ce genre de problème, je lui serait très reconaissant de bien vouloir m´éclairer, car là, je ne comprend pas du tout ce qu´il fait.

Altonfrere
Altonfrere
Niveau 10
21 novembre 2004 à 00:44:58

déjà il faut savoir qu´en debug toute une série de fonctionnalités pour détecter les erreurs est active ( les assertions par exemple qui te permettent d´avoir un contrôle sur les erreurs à l´exécution). En release tout ceci est inactif et donc seul les plantages te permettent de voir que quelquechose ne tourne pas rond.

Est ce que tu ne ferais pas des appels récursifs par hasard ? ou des copies dans des tableaux qui pourraient éventuellement provoquer des débordements ?

Il existe des outils qui te permettent de détecter ce genre de problèmes, si jamais tu n´arrives pas à le tracer avec le debugger :
BoundsChecker, Rational Purify etc, bon c´est vrai que c´est pas donné niveau prix mais bon :)...

dnob700
dnob700
Niveau 10
21 novembre 2004 à 00:53:30

non, j´ai aucun appel récursif, et même si j´ai pas mal de tableau, normallement, il ne devrait pas y avoir de débordement.

c´est le sens même de cette erreur que je ne comprend pas.

je vais essayer en dsactivant des bout de code pour localiser l´erreur.

Altonfrere
Altonfrere
Niveau 10
21 novembre 2004 à 00:59:09

apparement ca peut venir également d´un problème du compilo, après une recherche sur google groups :

http://groups.google.com/groups?hl=en&lr=&newwindow=1&threadm=YMdwY9qyBHA.1156%40cpmsftngxa09&rnum=1&prev=/groups%3Fhl%3Den%26lr%3D%26ie%3DUTF-8%26oe%3DUTF8%26newwindow%3D1%26selm%3DYMdwY9qyBHA.1156%2540cpmsftngxa09

désolé pour le lien à rallonge :)

LGV
LGV
Niveau 28
21 novembre 2004 à 01:44:58

je ne suis pas certain que cela s´applique ici...

une différence debug/release provient souvent d´un pb d´initialisation ; en debug, bcp de choses sont initialisées ( pointeurs, données, etc.) alors que ce n´est pas le cas en release. Si tu a du " stack corruption", c´est que tu dois jouer au barbare avec ta mémoire, à priori ( quoique d´autres choses pourraient causer cela..). Si tu es familier avec l´ASM, compile en debug et oscule le code des retour de méthodes/fonctions. Moi je commencerai pas vérifier ça.

dnob700
dnob700
Niveau 10
21 novembre 2004 à 21:08:24

bizarre, j´ai inliné mes fonctions et ça ne me fait plus l´erreur, je ne voit vraiment pas d´où ça pouvait venir.

mais bizarrement, ya des problème de linkage avec les fonction inliné, je vais continuer à voir ça.

Altonfrere
Altonfrere
Niveau 10
21 novembre 2004 à 21:41:49

si tu peux, uploade le projet qquepart . .. ca sera pas long à vérifier

dnob700
dnob700
Niveau 10
21 novembre 2004 à 22:56:16

une idée bête qui me passe par la tête : on ne peut inliner que des fonctions qui sont dans le même fichier que la fonction dans laquel on les inline ?

kufa
kufa
Niveau 9
22 novembre 2004 à 11:15:48

Attention: le __inline/inline ne mettera pas forcement ta fonction en inline, selon les compilos, mais devrait aider dans le choix de ces derniers. Mets le corps de tes methodes inlinees dans les . hpp/hxx/ixx.

" Run-Time Check Failure #2 - Stack around the variable ´zrt´ was corrupted"

Cas typiques, meme si le msg de l erreur n est pas tres explicite.
1)
A *a = new A;
A *b = a;
delete a;
delete b;
2)
A *a = new A;
delete[] a;
3)
mauvais upcast/reinterpret_cast

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment