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 :

[OpenCV] ok en Debug et pas bon en Release


Sujet :

C++

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 821
    Points : 280
    Points
    280
    Par défaut [OpenCV] ok en Debug et pas bon en Release
    Bonjour à tous

    je fais une petite appli utilisant opencv sur Visual Studio.

    Lorsque je lance l'appli en mode Debug tout marche nickel

    mais lorsque je la lance en mode Release ça plante sur cette commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (!g_writer.open("test.avi",0,18,cv::Size(752,480),true)) {
    et le debug m'envoie sur malloc.c exactement à la ligne marquée en rouge ici:

    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
    void * __cdecl _malloc_base (size_t size)
    {
        void *res = NULL;
    
        //  validate size
        if (size <= _HEAP_MAXREQ) {
            for (;;) {
    
                //  allocate memory block
                res = _heap_alloc(size);
                //  if successful allocation, return pointer to memory
                //  if new handling turned off altogether, return NULL
    
                if (res != NULL)
                {
                    break;
                }
                if (_newmode == 0)
                {
                    errno = ENOMEM;
                    break;
                }
    bon, je pense à un problème mémoire mais qu'est-ce qui fait que tout fonctionne avec les dll de debug et pas avec celles de release?

    si quelqu'un a une petite idée?
    merci

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    Salut,

    Lorsqu'on passe de Debug à Release les options de compilation changent. (optimisation pour la performance ...).
    Vérifie les changements d'options de compilation au niveau du projet.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 821
    Points : 280
    Points
    280
    Par défaut
    je te remercie mais ça ne me dit pas pourquoi la version release de la dll plante alors que la version debug ne plante pas....

    merci

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    ça ne me dit pas pourquoi la version release de la dll plante alors que la version debug ne plante pas
    Ce n'est visiblement pas lié au code en lui même.
    Mais bien des options de compilation.

    Malheureusement sans le projet sous les yeux, je ne vois pas comment aider d'avantage, que le conseil donné :
    Analyser les différences d'options de compilation de compilation au niveau des projets debugg / release :
    - convention d'appel (C , registre ...)
    - taille de pile, tas ...
    - même alignement des données exe / dll: BYTE, WORD, DWORD ....
    - est-ce qu'il y a une librairie de débug, et une de release (lib différente à linker ?)

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 821
    Points : 280
    Points
    280
    Par défaut
    désolée .... tu me parles chinois là
    - convention d'appel (C , registre ...)
    - taille de pile, tas ...
    - même alignement des données exe / dll: BYTE, WORD, DWORD ....
    je suis sur Visual Studio 2010 et la seule différence en tout cas donnée par moi c'est que pour le mode debug je pointe vers
    opencv_core220d.lib
    opencv_highgui220d.lib
    opencv_imgproc220d.lib
    opencv_features2d220d.lib
    et en mode Release c'est

    opencv_core220.lib
    opencv_highgui220.lib
    opencv_imgproc220.lib
    opencv_features2d220.lib
    à part cela je ne sais même pas ce qu'il faut que je regarde pour ce que tu me dis.... désolée

    je commence avec Visual Studio et ça fait au moins dix ans que je ne fais plus du c++

    merci de ton aide

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    Je crains malheureusement ne pas pouvoir aidé d'avantage comme je n'utilise pas VS2010.

    Mais je maintient que le problème à de forte chance de se trouver au niveau des options de compilation.

    A+

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,

    Citation Envoyé par BlueMonkey Voir le message
    Ce n'est visiblement pas lié au code en lui même.
    Façon de voir.
    Si le code en lui même est un comportement indéfini, le code généré pourra être très différent ou se comporter différemment entre une version debug et une version release. Et dans ce cas, il est souvent inutile d'aller chercher des causes exotiques car il est rare qu'une version release et une version debug changent radicalement les conventions d'appels, les piles, le tas et tutti quanti.

    @BlueMonkey : il est difficile de répondre dans l'absolu. Qui fait l'allocation ? Quel est le type de g_writer et que fait open ?

  8. #8
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Points : 2 502
    Points
    2 502
    Par défaut
    Salut,

    3DArchi. il est difficile de répondre dans l'absolu.
    On est d'accord là dessus . Comme indiqué plus haut, sans le projet difficile de trouver l'origine du problème.

    A partir de là on ne peux donner que des pistes probables basés sur sa propre expérience pour des symptômes similaires.
    S'il est vrai que le simple changement Release/Debugg ne change pas par défaut tous les options de compilation listé précédemment,
    il s'agit de choses attachés à une configuration qui a pu être changé (même par mégarde).
    Et comme c'est des problèmes difficiles à détecté à l'exécution, et facile à vérifier par comparaison des options, j'ai recommandé de commencé par là.

    exemple pouvant provoquer des symptômes similaires :
    un exécutable compilé avec une option d'alignement mémoire, lié à des DLL compilées avec d'autre option d'alignement mémoire.
    (ça peut très bien fonctionner à certains moment, mais planter à d'autres).

Discussions similaires

  1. Session et include => pas bon ménage ?
    Par shadeoner dans le forum Langage
    Réponses: 11
    Dernier message: 10/07/2006, 10h30
  2. Réponses: 5
    Dernier message: 27/10/2005, 12h23
  3. ANPE et interim.... ça sent pas bon
    Par mister3957 dans le forum Emploi
    Réponses: 24
    Dernier message: 07/10/2005, 10h22
  4. update et where font pas bon menage!!
    Par kleenex dans le forum Access
    Réponses: 5
    Dernier message: 30/09/2005, 17h45
  5. regsvr32 failed en debug mais pas en release
    Par afan dans le forum DirectX
    Réponses: 1
    Dernier message: 09/06/2004, 10h32

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