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++/CLI Discussion :

un comportement pas coh�rent


Sujet :

C++/CLI

  1. #1
    Membre extr�mement actif
    Profil pro
    D�veloppeur informatique
    Inscrit en
    D�cembre 2008
    Messages
    1 022
    D�tails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 1 022
    Par d�faut un comportement pas coh�rent
    Bonjour
    J'ai un comportement qui n'est pas coh�rent
    les variables son positionn� dans une methode:
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    			vWord = sFlex.substr( 0, mpos);
    			LWord += "/NNP";
    			pNextWord = new stAnalysedWord();
    			pNextToken = (char*)LWord.c_str();
    			pNextWord->wsWord = L"/";
    			pNextWord->wsLemma = L"/";
    			pNextWord->POS = POS_MARK;
    			pNextWord->ulStart = *ulWordNumber;
    			pNextWord->ulLength = 1;
    			pNextWord->iExcluded = 0;
    			pNextWord->Gender = GENDER_NONE;
    			pNextWord->iNbr = NBR_NONE;
    			pNextWord->iPers = PERS_NONE;
    			pNext2Word = new stAnalysedWord();
    			s = CStrConv::ambstowcs((char*)vWord.c_str());
    			pNext2Word->wsWord = s;
    			pNext2Word->wsLemma = s;
    			CStrConv::StrFreeW( s);
    			pNext2Word->POS = POS_NAMED_ENTITY;
    			pNext2Word->ulStart = *ulWordNumber + 1;
    			pNext2Word->ulLength = 1;
    			pNext2Word->iExcluded = 4;
    			pNext2Word->Gender = GENDER_MASCULINE;
    			pNext2Word->iNbr = NBR_SING;
    			pNext2Word->iPers = PERS_NONE;
    			pNext3Word = new stAnalysedWord();
    			pNext3Word->wsWord = L".";
    			pNext3Word->wsLemma = L".";
    			pNext3Word->POS = POS_STOPMARK;
    			pNext3Word->ulStart = *ulWordNumber + 2;
    			pNext3Word->ulLength = 1;
    			pNext3Word->iExcluded = 1;
    			pNext3Word->Gender = GENDER_NONE;
    			pNext3Word->iNbr = NBR_NONE;
    			pNext3Word->iPers = PERS_NONE;
    Sous debugger les pointeurs sont mis non d�finis;
    Elles sont acc�d�es dans la m�thode appelante. Je vous met le code et mes commentaires
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    		if( pAnalysedWord != nullptr)
    		{
    			bIsAllocated = true;
    			pNextWord = pAnalysedWord;
    		}
    		if(pNext2Word != nullptr)
    		{
    			bDoubleAllocated = true;
    		}
    		if( pNext3Word != nullptr)
    		{
    			bTripleAllocated = true;
    		}
          *ulWordNumber = *ulWordNumber + 1;
    	  pAnalWord->push_back( pAnalysedWord);
    	  if( bIsAllocated == true)
    	  {
    		  *ulWordNumber = *ulWordNumber + 1;
    		  pAnalWord->push_back( pNextWord);
    		  bIsAllocated = false;
    	  }
    	  if( bDoubleAllocated == true)
    	  {
    		  *ulWordNumber = *ulWordNumber + 1;
    		  pAnalWord->push_back( pNext2Word);
    		  bDoubleAllocated = false;
    	  }
    	  if( bTripleAllocated == true)
    	  {
    		  *ulWordNumber ++;
    		  // il y a a mettre le point dans un chunk
    		  // en fait a ce point ce n'est pas nécéssaire
    		  pAnalWord->push_back( pNext3Word);
    		  bTripleAllocated = false;
    	  }
    Dans cette s�quence on passe par le premier test
    mais on ne passe pas ni dans le second ni dans le troisi�me
    ce probl�me est bloquant.
    qui m'aidera sera

  2. #2
    Membre �m�rite
    Avatar de emixam16
    Homme Profil pro
    Chercheur en s�curit�
    Inscrit en
    Juin 2013
    Messages
    335
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activit� : Chercheur en s�curit�

    Informations forums :
    Inscription : Juin 2013
    Messages : 335
    Par d�faut
    Bonjour,

    Tu as 3 conditions. Si tu es sur que tu ne rentre jamais ni dans la deuxi�me ni dans la troisi�me, c'est forcement qu'au moment de l'�valuation de la condition, ces 2 variables (pNext2Word & pNext2Word) valent NULL.

    Je ne vois pas d'erreur directement dans ton code.
    • Teste le retour de tes new.
    • V�rifie qu'entre la cr�ation de ces variable et l'appel de la condition tu ne modifie pas les variables


    Par ailleurs tu devrais factoriser ton code, cela te donnerais un code plus maintenable et o� tu trouverais plus facilement tes erreurs. Parce qu'actuellement ton code est vraiment sale. Essaye d'utiliser le moins possible new (pr�f�re mon_objet(mes_valeurs_d_initialisation).

    Je vous met le code et mes commentaires

    [...]

    // il y a a mettre le point dans un chunk
    // en fait a ce point ce n'est pas n�c�ssaire
    Merci beaucoup pour tes commentaires, ils m'ont �norm�ment aid� � comprendre ton code :p

  3. #3
    Expert confirm�
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 772
    Par d�faut
    Citation Envoy� par emixam16 Voir le message
    Teste le retour de tes new.
    Ne sert � rien C'est un comportement venant du C, mais en C++ new jette une exception

    Page de l'op�rateur new:

    The first version (1) throws bad_alloc if it fails to allocate storage.
    Otherwise, it throws no exceptions (no-throw guarantee).

  4. #4
    Membre �m�rite
    Avatar de emixam16
    Homme Profil pro
    Chercheur en s�curit�
    Inscrit en
    Juin 2013
    Messages
    335
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activit� : Chercheur en s�curit�

    Informations forums :
    Inscription : Juin 2013
    Messages : 335
    Par d�faut
    Au temps pour moi foetus, je devais pas �tre tr�s attentif en r�pondant.
    Mais du coup �a simplifie ton probl�me! T'as plus qu'a regarder (en t'aidant du d�bogueur si tu veux) quand tes objets sont modifi�s/supprim�s.

  5. #5
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 503
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 503
    Par d�faut
    mais en C++ new jette une exception
    Ce comportement est modifiable en fonction des options de compilation.
    Mais bon, vous savez, avec @JeanNoel53, cherchez pas trop la petite b�te, ces boulettes sont si �normes.

  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
    Citation Envoy� par JeanNoel53 Voir le message
    pNextToken = (char*)LWord.c_str();
    Bzzt! Perdu!
    Merci d'avoir jou�.


    Citation Envoy� par JeanNoel53 Voir le message
    s = CStrConv::ambstowcs((char*)vWord.c_str());
    Alors l�, c'est encore plus absurde, parce que je suis absolument certain que ambstowcs n'a pas besoin d'un pointeur non-const (et si la fonction en n�cessite incorrectement un, prendre une version correcte).


    Citation Envoy� par JeanNoel53 Voir le message
    Code erron� : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    *ulWordNumber = *ulWordNumber + 1;
    ...
    *ulWordNumber ++;
    Attention, la derni�re ligne ne fait pas ce que tu crois.
    Le plus simple, ce serait de mettre ++(*ulWordNumber); partout.
    De plus, si cette variable est un pointeur, pourquoi n'est-elle pas pr�fix�e de p comme les autres pointeurs? Si on utilise de la notation hongroise, on a int�r�t � l'utiliser correctement.


    Citation Envoy� par JeanNoel53 Voir le message
    Code moyen : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    			s = CStrConv::ambstowcs((char*)vWord.c_str());
    			pNext2Word->wsWord = s;
    			pNext2Word->wsLemma = s;
    			CStrConv::StrFreeW( s);
    � part le cast, ce n'est pas � proprement parler mauvais, mais l� aussi tu devrais te faire une fonction d�di�e de conversion pour ne pas avoir � g�rer le nettoyage dans le code utilisateur:
    Code C++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    std::wstring cppmbstowcs(char const *strA)
    {
    	wchar_t * strW = CStrConv::ambstowcs(strA);
    	std::wstring ret(strW);
    	CStrConv::StrFreeW(strW);
    	return ret;
    }
    Et remplacer ton code:
    Code C++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    			pNext2Word->wsWord = cppmbstowcs(vWord.c_str());
    			pNext2Word->wsLemma = pNext2Word->wsWord;
    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
    Membre extr�mement actif
    Profil pro
    D�veloppeur informatique
    Inscrit en
    D�cembre 2008
    Messages
    1 022
    D�tails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 1 022
    Par d�faut
    [*]Teste le retour de tes new.
    Je l'ai d�ja fait et j'ai non Initialis� sur toutes les valeurs

    [*]V�rifie qu'entre la cr�ation de ces variable et l'appel de la condition tu ne modifie pas les variables
    je les initialise sur la base de ce qu"elle doivent avoir

    Essaye d'utiliser le moins possible new (pr�f�re mon_objet(mes_valeurs_d_initialisation)
    je ne sais pas comment faire

    mais j'ai essay� de passer par une liste( sans succ�s):
    la ListAnalysedWord n'est pas allou�e
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    		pListAnalysedWord = new std::list<stAnalysedWord*>();
    j'ai essay� le conseil
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    pListAnalysedWord = mon_objet(mes_valeurs_d_initialisation);
    le compilateur m'a jet�:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    1>..\..\..\..\Linguistic\ParserManager\src\ParserManager.cpp(624): error C2065: 'mes_valeurs_d_initialisation'*: identificateur non déclaré
    1>..\..\..\..\Linguistic\ParserManager\src\ParserManager.cpp(624): error C3861: 'mon_objet'*: identificateur introuvable
    Je suis donc aller en arri�re.

    le r�sultat de l'ex�cution de la liste est:pListAnalysedWord = <valeur non d�finie>

    je vous donne l'interface:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    void CParserManager::BSplitTag( char* pNextToken, char* pWord, char* pPos, char* pFlex, std::list<stAnalysedWord*>* pListAnalysedWord, unsigned long* ulWordNumber)
    je vous donne une partie du code mis � jour:
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    	len = strlen( pNextToken);
    	std::string sWord = pNextToken;
    	int npos = sWord.find( "(");
    	if( npos != -1)
    	{
    		pListAnalysedWord = new std::list<stAnalysedWord*>();
    		LWord = "";
    		sFlex = "";
    		LWord = sWord.substr( 0, npos);
    		sFlex = sWord.substr( npos+1, len);
    		LWord += sFlex;
    		pNextToken = (char*)LWord.c_str();
    		// il reste à provisionner le résultat de la découpe : (
    		pNextWord = new stAnalysedWord();
    		pNextWord->wsWord = L"(";
    		pNextWord->wsLemma = L"(";
    		pNextWord->POS = POS_MARK;
    		pNextWord->ulStart = *ulWordNumber;
    		pNextWord->ulLength = 1;
    		pNextWord->iExcluded = 0;
    		pNextWord->Gender = GENDER_NONE;
    		pNextWord->iNbr = NBR_NONE;
    		pNextWord->iPers = PERS_NONE;
    		pListAnalysedWord->push_back( pNextWord);
    	}

  8. #8
    Membre extr�mement actif
    Profil pro
    D�veloppeur informatique
    Inscrit en
    D�cembre 2008
    Messages
    1 022
    D�tails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 1 022
    Par d�faut La solution
    j'ai initialiser pListAnalysedWord dans la m�thode appelant et �a a r�solu le probl�me d'affectation des pointeurs

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 6
    Dernier message: 09/05/2009, 14h23
  2. heritage pas coh�rent.
    Par pmithrandir dans le forum Mise en page CSS
    R�ponses: 2
    Dernier message: 04/06/2008, 12h20
  3. perldb n'est pas coh�rent
    Par Linschn dans le forum Langage
    R�ponses: 5
    Dernier message: 20/04/2008, 18h53
  4. R�ponses: 1
    Dernier message: 23/10/2007, 09h35

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