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 :

exception: Stack overflow


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 18
    Par d�faut exception: Stack overflow
    Bonjour,

    Pour les besoins d'une application, je dois afficher et actualiser quelque donn�es que je r�cup�rer depuis un carte.
    Le probl�me que je rencontre est dans l'actualisation des donn�es : j'utilise un thread qui parcours tous les donn�es et demande � la carte leur nouvelle valeur une par une.
    Au bout d'un moment, j'ai un d�passement de pile ( Stack overflow at 0xXXXXXXX), qui intervient toujours au m�me endroit: lors de la r�cup�ration d'une valeur.

    Quelqu'un peut me dire qu'est ce qui peut cause ce d�passement de pile ?
    Merci pour vos r�ponses.

  2. #2
    Membre Expert
    Homme Profil pro
    �tudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par d�faut
    Hello,

    G�n�ralement �a vient de fonctions r�cursives : trop d'appels imbriqu�s => stack overflow.

    Post le bout de code qui pose probl�me, �a sera plus simple que de jouer aux devinettes pour trouver le vrai probl�me.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 18
    Par d�faut
    le code est tr�s long mais voici le bout de code (simplifier) o� l�exception est lev�e:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     // ce qui permet de lancer le thread: 
    this->hDataThread = CreateThread ( NULL,             
                                    0,      //  Est ce qu'on peut spécifier une taille plus grande pour eviter le depassement?                       
                                    &dwThreadStart,    
                                    this,                             
                                    0,                               
                                    &this->dwThreadId );
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     // Le thread 
    DWORD WINAPI CMaClass::dwDataThreadStart( void* pvThreadParam )
    {
        CMaClass* pThis = (CMaClass*)pvThreadParam;
        return pThis->dwThread(  );
    }
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    DWORD CMaClass::dwThread(  )
    {
     
        EError eError;
        do
        {
            for (int iListIndex = 0; iListIndex < this->xmlDataList->GetCount(); iListIndex++)
            {
                    AnsiString szValue = L"";
                    _di_IXMLStandardTestV1_Field xmlUsage = xmlDataList->Get_Field(iListIndex);
                    szValue = szGetValue( xmlUsage );   // <== cette fonction appelle une fonction d'une autre dll ou il y a beacoup d'appels imbriqués 
                    mMapValue[ xmlUsage->Id ] = szValue;;
            }
        } while ( ... );
        return 0;
    }
    Je pense que le probl�me vient des fonctions r�cursives, comme tu as dis.
    Est ce qu'il y a une solution pour ce probl�me ?
    Ce Thread permet d'actualiser les donn�es une par une.
    Je ne sais pas si il y a une autre m�thode pour actualiser les donn�es que de faire du polling.
    Je d�veloppe sous C++ builder.
    Merci

  4. #4
    Membre �prouv�
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par d�faut
    Sous Visual, on peut changer la taille qu'on alloue � la pile, mais je ne sais plus comment.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 18
    Par d�faut
    La fonction CreateThread a un param�tre o� on peut sp�cifier la taille de la pile, s'il est � z�ro, une taille par d�faut est prise.
    le probl�me est que je ne sais pas si c'est �a le probl�me ni quelle taille prendre pour ne pas avoir de d�passement.

  6. #6
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    G�n�ralement, il y a deux causes pour des Stack Overflow:
    • Des tableaux tr�s volumineux en variable locale
    • Un appel r�cursif infini.

    Les d�bordements de pile suite � un appel r�cursif "trop profond" mais pas infini, en l'absence gros tableaux, �a n'arrive pratiquement jamais.

    Note: il me semble que la pile fait 1MO par d�faut sous Windows.
    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.

Discussions similaires

  1. Exception de premi�re chance : stack overflow
    Par Far_Away dans le forum C++
    R�ponses: 9
    Dernier message: 02/02/2011, 20h22
  2. pourquoi ai-je une exception stack overflow ?
    Par AsmCode dans le forum VB.NET
    R�ponses: 1
    Dernier message: 20/06/2010, 12h44
  3. exception stack overflow
    Par farid0031 dans le forum C++Builder
    R�ponses: 2
    Dernier message: 05/05/2009, 00h46
  4. [Form.Close] System Stack Overflow Exception
    Par Ticoche dans le forum Windows Forms
    R�ponses: 6
    Dernier message: 03/01/2008, 18h13
  5. Stack overflow
    Par portu dans le forum Langage
    R�ponses: 3
    Dernier message: 26/11/2003, 15h16

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