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 :

[API C/Python] Assertion Failed : gc->gc.gc_refs != 0


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 55
    Points : 43
    Points
    43
    Par défaut [API C/Python] Assertion Failed : gc->gc.gc_refs != 0
    Bien le bonjour !

    Je vous fais un petit topo : j'essaye non sans peine de faire de l'embedding python dans une appli C++.

    J'ai donc dans mon appli une fonction qui est appelé plusieurs fois de suite. Cette fonction allant chercher des informations dans plusieurs scripts pythons.

    Pour une meilleur compréhension, voici le code de la fonction :


    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    int CPluginManager::GetInfo(int count, CString& result)
    {
        PyObject *pName, *pModule, *pDict, *pFunc, *pValue, *pInfo, *pResult;
     
        // On modifie le PATH de l'interpréteur Python pour qu'il aille chercher les plugins où il faut
        PySys_SetPath("..\\Plugin;..\\lib;..\\lib\\site-packages");
     
        pName = PyString_FromString((CStringA)vPluginAdr[count]);
        // Error checking of pName left out
     
        pModule = PyImport_Import(pName);   
        Py_XDECREF(pName); 
     
        if (pModule != NULL) {
    		// On accède au dictionnaire du module
    		pDict = PyModule_GetDict(pModule);
    		pInfo = Py_BuildValue("[s]", "");
     
    		// On ajoute un attribut à notre dictionnaire
    		PyDict_SetItemString(pDict, "info", pInfo);
     
            pFunc = PyObject_GetAttrString(pModule, "GetInfo");
            // pFunc is a new reference
     
            if (pFunc && PyCallable_Check(pFunc)) {
                pValue = PyObject_CallObject(pFunc, NULL);
                if (pValue != NULL) {
    				// On accède à une propriété du dictionnaire
    				pResult = PyDict_GetItemString(pDict, "info");
    				result = PyString_AsString(PyList_GET_ITEM(pResult,0));
     
                    Py_DECREF(pValue);
    				Py_DECREF(pResult);
                }
                else {
                    Py_DECREF(pFunc);
                    Py_DECREF(pModule);
                    return 1;
                }
            }
    	PyErr_Clear();
    	Py_XDECREF(pFunc);
    	Py_XDECREF(pDict);
    	Py_XDECREF(pInfo);        
            Py_XDECREF(pModule);
        }
        return 0;
    }
    La première exécution de cette fonction fonctionne parfaitement, mais à la deuxième exécution, lors du "pModule = PyImport_Import(pName); " qui est donc la première définition d'un PyObject dans la fonction, une "Assertion Failed !" me saute au visage m'indiquant que c'est l'expression gc->gc.gc_refs != 0 qui pose problème.

    Je précise que ce message d'erreur survient uniquement lors d'une compilation en debug, en release il n'y a pas de problème à ce niveau. Par contre en release, j'ai une exception qui est levée au moment du Py_Finalize(); Je ne serais pas étonné qu'il y a un lien entre les deux en tout cas.

    J'espère avoir été assez clair dans la description de mon problème et que vous pourrez m'éclairer à ce sujet =)

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 55
    Points : 43
    Points
    43
    Par défaut
    Le problème est plus ou moins résolu. En fait, il ne fallait pas faire de DECREF sur le dictionnaire.
    Sans cela, je n'ai plus d'Assert failure mais j'ai toujours des petites soucis. Toujours est il que je met le sujet en résolu pour ça.

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

Discussions similaires

  1. Debug Assertion Failed ! File: dbgheap.c
    Par jacques_henry dans le forum MFC
    Réponses: 9
    Dernier message: 15/04/2015, 11h29
  2. Assertion failed avec Boost.Python
    Par spartan811 dans le forum Boost
    Réponses: 0
    Dernier message: 15/05/2012, 15h27
  3. debug assertion failed...
    Par BnY dans le forum MFC
    Réponses: 2
    Dernier message: 18/04/2006, 16h49
  4. Réponses: 4
    Dernier message: 22/11/2005, 17h55
  5. Réponses: 3
    Dernier message: 07/12/2004, 22h09

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