IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

compile = ok ; exec = none ?routine de debuggage ?


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Par défaut compile = ok ; exec = none ?routine de debuggage ?
    salut à tous

    j'ai un script qui compile et s'execute correctement quand il traite des tableaux de moyenne capacité

    le script part avec un tableau de environ 300 000 elements int (taille des int = 1 octet)

    pour ensuite scinder le tableau en plusieurs

    jusque la tout fonctionne parfaitement

    mais si mon tableau initial depasse les 500 000 elements, le programme ne s'execute plus

    j'ai un code d'erreur -1073741571

    auriez vous des suggestions pour trouver une routine de debugage pour arriver à identifier la source de ce bug ?

    rogerio

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    1. Quel genre de plate-forme ?
    2. Il n'y a pas de script en C++.
    3. Tes tableaux sont comment ? statiques, automatiques ou dynamiques ?

    Au passage: Ce code d'erreur donne FFFF FFFF C000 00FD en hexa, mais sans connaître la plate-forme, on ne peut pas savoir si ça a une signification particulière...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Par défaut
    bah je l'ai compilé avec mingw32 sous linux

    pour le debuggage j'essaie avec mingw studio sous windows

    l'executable est un win32 exe

    les tableaux sont declarés normalements (statiques)

    int array[array size]

    rogerio

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    bah je l'ai compilé avec mingw32 sous linux
    l'executable est un win32 exe
    (taille des int = 1 octet)


    Quant à tes arrays, ils sont statiques s'ils sont déclarés en variable globale. Ils sont automatiques s'ils sont déclarés en variable locale d'une fonction...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    On peut très bien compiler des binaires pour windows sous linux, mon cher Médinoc.

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    Oui, mais même sous Linux, à ma connaissance, les int font 32bits, mon cher loufoque...

    PS: Au fait, je sais ce que signifie le W de MinGW, hein... Et je sais ce que c'est qu'un cross-compilateur pour Windows sous Linux, j'en ai déjà "fait" un...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par loufoque
    On peut très bien compiler des binaires pour windows sous linux, mon cher Médinoc.
    Quand on fait de la compilation croisée, les tailles sont fixées par la cible, pas par l'hôte.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Par défaut
    pour la taille des int je me suis peut etre mal exprimé

    le tableau principal contient des int d'un octet parce que l'amplitude des chiffres est 0-255 d'où 1 octet de longueur

    rogerio

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    La taille d'un type natif n'est pas déterminée par son contenu, mais par son type.
    Sous Win32 (et aussi sous Win64, en fait), un int fait 32 bits, donc 4 octets, indépendamment de la valeur stockée. Un int égal à 255 comporte en réalité un octet à 255 et trois octets à zéro.

    Où ton tableau initial est-il déclaré ?
    S'il est déclaré dans une fonction, il sera donc alloué sur la pile. Un tableau de 500 000 int fait 2 000 000 octets, soit 1,9 Mo. Sachant que sous Win32, la pile fait 1 Mo par défaut, tu as donc un débordement de pile...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Par défaut
    donc ce ne sont pas des int, mais des char. Mais ça change rien.

    et puis si tu déclare statiquement des tableaux et que tu met plus d éléments qu'il y a de cases, ça saute, c'est normal.

    donc sans code, et sans message d'erreur explicite, tu te débrouilles.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Par défaut
    bah je ne peux pas poster le tableau de 500 000 elements

    sa delaration est dans est faite au début de la fonction main

    int array[500000]={element0,jusqu'au dernier};

    et le bug est clairement du à un dépassement de capacité de quelque chose puisque le prog fonctionne correctement avec un tableau de 200 000 éléments

  12. #12
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Par défaut
    Citation Envoyé par rogerio
    bah je ne peux pas poster le tableau de 500 000 elements

    sa delaration est dans est faite au début de la fonction main

    int array[500000]={element0,jusqu'au dernier};

    et le bug est clairement du à un dépassement de capacité de quelque chose puisque le prog fonctionne correctement avec un tableau de 200 000 éléments
    tu t 'es fait chier a écrire a la main 500 000 entrées dans ton code en dur ?

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 131
    Par défaut
    loooooool

    le tableau est généré electroniquement

    @Médinoc

    grace à ton explication j'ai trouvé une solution

    je declare le tableau avant la fonction main, et ça marche

    cool

    merci à tous

  14. #14
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Par défaut
    Bonjour,

    sa delaration est dans est faite au début de la fonction main

    int array[500000]={element0,jusqu'au dernier};
    Les variables statiques déclarées en local à un fonction sont directement mises sur la pile. 500000 octets sur la pile, ça dépasse la taille par défaut de celle-ci, c'est donc un stack overflow qui faisait crasher ton programme.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème compilation avec Runtime.GetRunTime().exec(javac)
    Par Alkadabra dans le forum API standards et tierces
    Réponses: 0
    Dernier message: 17/02/2010, 22h43
  2. Debuggage d'un code compilé en runtime
    Par ctxnop dans le forum C#
    Réponses: 0
    Dernier message: 22/12/2009, 09h46
  3. Compilation borland et debuggage gcc
    Par Alfred12 dans le forum wxWidgets
    Réponses: 0
    Dernier message: 02/08/2007, 16h47
  4. Vitesse de compilation
    Par srvremi dans le forum C++Builder
    Réponses: 5
    Dernier message: 30/07/2002, 16h49
  5. Réponses: 1
    Dernier message: 27/05/2002, 01h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo