none
un comportement surprenant d'une liste RRS feed

  • Question

  • bonjour,

    J'ai un comportement surprenant dans le traitement d'une liste:

    			iiValue = gcnew cli::array<Int32,1>(15);
    			plistQualificateurNormalized = gcnew List<QualificateurNormalizedM^>();
    			pelementNormalized = gcnew QualificateurNormalizedM();
    			pListWord = gcnew List<CAnalysedWordM^>();
    			pelementNormalized->pWord = pListWord;
    			pColor = gcnew List<CAnalysedWordM^>();
    			pelementNormalized->pColors  = pColor;
    			iAlloc++;
    			List<ElementSemanticM^>::Enumerator itElemnt;
    			itElemnt = plisteQualificatif->GetEnumerator();
    			itElemnt.MoveNext();
    			pPrevEnreg = itElemnt.Current;
    			for each( pEnreg in plisteQualificatif)
    			{ // 1
    				if( itElemnt.MoveNext())
    				{ // 2
    					pNextEnreg = itElemnt.Current;
    				} // 2
    				else
    				{ // 2
    				 	pNextEnreg = pEnreg;
    				} // 2
    				bIsProcessed = true;
    				if( ( pPrevEnreg->iPOS == enPOSM::POS_SEMI_COLUMN  || (pEnreg->nuIdElemn != (int)iOldEnreg && iOldEnreg != (int)0) && ( bVerb == true && bSujet == true && bComplement == true)))
    			    { // 2
    		            plistQualificateurNormalized = StoreQualificateur( plistQualificateurNormalized, pListWord, Occurence, iOldEnreg, iAlloc, pPrevEnreg, pelementNormalized, pColor, wsPredicat, wsVerb, wsSujet, wsComplement, wsDeclencheur, wsText, wsIdentifier, wsCandidatIdentifier, iPos, iType, iiValue, u, v);
    					for each( QualificateurNormalizedM^ pelementNoramlized in plistQualificateurNormalized)
    					{
    						wsText = pelementNormalized->Comment;
    					}
    					if( iAlloc == 0)
    					{ // 3
    						iiValue = gcnew cli::array<Int32,1>(15);
    						pelementNormalized = gcnew QualificateurNormalizedM();
    						pListWord = gcnew List<CAnalysedWordM^>();
    						pelementNormalized->pWord = pListWord;
    						pColor = gcnew List<CAnalysedWordM^>();
    						pelementNormalized->pColors  = pColor;
    						iAlloc++;
    					} // 3

    ce bloc de code montre l'allocation des allocation des ressources dans ce code.

    Le bloc suivant montre la deuxième écriture

                if( nConsolidated + 1 == iSize)
                {
                    // on clear la liste et on réécrit le dernier enregistrement avec les éléents consolidés
                    pelementNormalized = gcnew QualificateurNormalizedM();
    				pelementNormalized->min = iMin;
                    pelementNormalized->max = iMax;
                    pelementNormalized->type = (int)iType;
    				plistQualificateurNormalized = StoreQualificateur( plistQualificateurNormalized, pListWord, Occurence, iAlloc, iOldEnreg, pEnreg, pelementNormalized, pColor, wsPredicat, wsVerb, wsSujet, wsComplement, wsDeclencheur, wsText, wsIdentifier, wsCandidatIdentifier, iPos, iType, iiValue, u, v);
    				bStored = true;
    		    }
    			if( iAlloc > 0 && bStored == false)
    			{
    				pelementNormalized = gcnew QualificateurNormalizedM();
    				plistQualificateurNormalized = StoreQualificateur( plistQualificateurNormalized, pListWord, Occurence, iAlloc, iOldEnreg, pEnreg, pelementNormalized, pColor, wsPredicat, wsVerb, wsSujet, wsComplement, wsDeclencheur, wsText, wsIdentifier, wsCandidatIdentifier, iPos, iType, iiValue, u, v);
    			}
    			for each( QualificateurNormalizedM^ pelementNormalized in plistQualificateurNormalized)
    			{
    				wsText = pelementNormalized->Comment;
    			}
            }
            catch (...)
            {
                ;
            }

    dans la liste après le 1° enregistrement la liste comprend 1 terme et dans le second elle comprend deux fois le second terme.

    Ou est passé le premier terme?


    Jean Noël Martin

    lundi 29 septembre 2014 18:48

Réponses

Toutes les réponses