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 :

NullReferenceException en release


Sujet :

C++

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    87
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 87
    Par d�faut NullReferenceException en release
    Bonjour, je programme sous visual studio 2003 une application concernant le son. Grossi�rement il s'agit d'une interface graphique en .net(Framework .net) qui fait appel � des dll.

    Dans l'une des DLL appel�e, il se produit une erreur curieuse uniquement en release, �a passe en debug.

    Je re�ois une boite de dialogue qui m'explique qu'il s'est produit une NullReferenceException.

    J'active d'abord toutes les exception dans le d�buggeur visual studio mais rien � faire, je n'arrive pas � reproduire l'erreur en debug.

    A l'aide de MessageBox j'identifie la ligne de code sur laquelle mon programme plante, en RELEASE. Il s'agit d'une b�te allocation � l'aide de new :

    m_pRawBuffers = new AVRawDataBuffer[uNumBuffers];

    uNumBuffers vaut 1 (pass� en argument)

    Je ne comprend pas cette erreur, je n'ai m�me pas le temps de v�rifier la validit� mon pointeur m_pRawBuffers que le programme crash.

    Une id�e ? je cherche depuis plusieurs jours.

    Merci

  2. #2
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    87
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 87
    Par d�faut
    J'ai tent� de catcher l'appel du new, le bloc catch est bien appel�. Il s'agit donc bien d'une erreur de l'operateur new. Seulement je ne comprend pas pourquoi. Mon PC dispose encore de 400-500mo de RAM avant chargement du fichier son.

    Si on �carte le manque de m�moire, quelle cause peuvent faire planter new ?

  3. #3
    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
    �a peut �tre le constructeur de AVRawDataBuffer qui lance une exception, si l'erreur retourn�e est autre chose que std::bad_alloc...
    Sinon, faire du printf-debugging pour v�rivier que uNumBuffers vaut bien 1 et non une valeur bizarro�de genre 0xCCCCCCCC...
    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.

  4. #4
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    87
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 87
    Par d�faut
    AVRawBuffer est une structure toute b�te :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    typedef struct AVRawDataBuffer
    	{
    		void				* pBuffer;
    		struct AVRawDataBuffer	* pNextBuffer;
    		struct AVRawDataBuffer	* pPrevBuffer;
     
    		//Données pour utilisations diverses
    		DWORD	dwFlag1;
    		DWORD	dwFlag2;
    	}AVRawDataBuffer;
    uNumBuffer vaut bien 1, pas de soucis.

    De plus, le programme plante sur des new mais pas syst�matiquement sur celui l�. je penche pour une corruption de la m�moire, je pense qu'il se produit quelque chose genre un d�passement d'indice de tableau. Le probl�me ne doit pas se trouver l� mais bien avant.

    Quel outils puis je utiliser pour v�rifier l'utilisation m�moire lors de l'�x�cution en release ? Je sais que de tel outils existent mais je n'en connais aucun.

    Merci

  5. #5
    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
    Si c'est un d�passement de tableau, tu peux refaire la m�me chose en Debug et r�gler appeler une fonction de debug pour dire "v�rification absolument syst�matique du tas". Cela rendra l'application encore plus lente que d'habitude en debug, mais les chances que la CRT d�tecte le "mauvais" buffer seront plus grandes.
    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.

  6. #6
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    As-tu d�j� conscience du fait que cette structure est, typiquement, �crite en C

    En C++, ce serait, tout simplement (si le nom du type que tu veux utiliser pour cette structure est AVRawDataBuffer)
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    struct AVRawDataBuffer
    {
        void * pBuffer;
        AVRawDataBuffer * pNextBuffer;
        AVRawDataBuffer* pPrevBuffer;
     
    		//Données pour utilisations diverses
        DWORD dwFlag1;
        DWORD dwFlag2;
    };
    (il serait d'ailleurs peut �tre utile d'envisager une structure template, pour �viter cet horrible void * pbuffer )

    Cela ne change rien au probl�me, mais c'est plus dans une optique C++
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  7. #7
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    87
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 87
    Par d�faut
    Citation Envoy� par M�dinoc Voir le message
    Si c'est un d�passement de tableau, tu peux refaire la m�me chose en Debug et r�gler appeler une fonction de debug pour dire "v�rification absolument syst�matique du tas". Cela rendra l'application encore plus lente que d'habitude en debug, mais les chances que la CRT d�tecte le "mauvais" buffer seront plus grandes.
    Je ne comprend pas trop, on peut d�finir �a quelque part dans le debugger ? J'ai d�j� activ� toutes les exceptions avec "break into the debugger" mais sans succ�s ...

  8. #8
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    87
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 87
    Par d�faut
    Ah ok, tu parles surement d'appeler une fonction dans le try catch.

    Le probl�me c'est que le plantage est al�atoire.

  9. #9
    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
    Non, c'est une fonction qu'on appelle depuis le code.
    Un truc du genre _CrtSetDebugMode(), mais pas forc�ment celle-ci.
    Edit: _CrtSetDbgFlag() avec le flag _CRTDBG_CHECK_ALWAYS_DF. Voir le second exemple de code, juste avant la section Requirements.
    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.

  10. #10
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    87
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 87
    Par d�faut
    Malheureusement pour moi, �a ne change rien.

  11. #11
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    87
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 87
    Par d�faut
    Probl�me r�solut, il s'agissait d'un alignement diff�rent par d�faut entre mes projets.

Discussions similaires

  1. regsvr32 failed en debug mais pas en release
    Par afan dans le forum DirectX
    R�ponses: 1
    Dernier message: 09/06/2004, 10h32
  2. Condition sur debug et release
    Par xave dans le forum MFC
    R�ponses: 3
    Dernier message: 04/02/2004, 15h04
  3. bloqu� en mode Release
    Par matsch77 dans le forum MFC
    R�ponses: 3
    Dernier message: 07/01/2004, 17h17
  4. Ma version release ne fonctionne pas
    Par totof42 dans le forum C++Builder
    R�ponses: 2
    Dernier message: 25/11/2003, 13h15
  5. Gros Probl�me avec DirectShow et la m�thode RELEASE
    Par Olivier Delmotte dans le forum DirectX
    R�ponses: 3
    Dernier message: 10/03/2003, 18h10

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