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 :

ph�nom�ne bizarre observ� sur une machine


Sujet :

C++/CLI

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre extr�mement actif
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    926
    D�tails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 926
    Par d�faut ph�nom�ne bizarre observ� sur une machine
    Bonjour j'observe sur une machine XP unique et ancienne (Service pack 3) un ph�nom�ne myst�rieux sur un projet CLR/CLI (net framework 4.0),
    j'ai essay� sur une autre machine xp virtuel , pas de probl�me , �a passe nickel.
    Voila la fonction initwave crashe sur la ligne THSound ts={0};.
    Quand je remplace THSound ts={0}; par THSound ts; �a passe (pas de crash).
    Quand je remplace ceux-ci par memset(&ts,0,sizeof(THSound)); �a crashe.
    J'ai remplac� ceux-ci par un new THSound et un delete � la fin , �a passe (pas de crash).
    Pourquoi ????


    La fonction msg est ma fonction qui affiche un messagebox pour debugger ben oui.

    Je ne comprend pas ce ph�nom�ne bizarre.
    L'exception (crash) � lieu dans une zone non manag�e.

    �a m'intrique ce genre de ph�nom�ne.
    Windows XP Service Pack 3.

    Voici un bout de code :
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    #pragma unmanaged
    typedef enum {
    	mono,
    	stereo
    }THSound_Channel;
    typedef bool (*E_HS)(void *HSound,void *param,short **u,int *sz);
    typedef bool (*E_ENDHS)(void *HSound,void *param,short *u,int sz);
    typedef struct {
    	int sizecb;
    	struct {
    	DWORD freq;
    	DWORD bufko;
    	THSound_Channel channel;
    	char bits;
     
    	HANDLE hLic; 
    	HANDLE hEvent;
     
    	void *param;
    	E_HS devent;
    	E_ENDHS endev;
     
    	char nbuf;
    	}in;
    }THSound,*PHSound;
     
     
    bool endev(void *HSound, void *param, short *u, int sz)
    {
    	delete u;
    	return true;
    }
     
    //la fonction devent est dans une zone managé
     
    void msg(char* s);
     
    #include "e:/communlib/types_wave.h"
     
    //fonctionne
    void* initwave(int sample, int bits, int channel,char *name,int &mcierror, void *paramclass)
    {
    	msg("InitWave1");
    	void *ret = nullptr;
    	if (_HSound_Load())
    	{
    		msg("InitWave2");
    		msg("InitWave2x0");
    		THSound ts;
    		msg("InitWave2x1");
    		ts.sizecb = sizeof(ts);
    		msg("InitWave2x2");
    		ts.in.bits = bits;
    		ts.in.channel = channel==1? THSound_Channel::mono:THSound_Channel::stereo;
    		ts.in.nbuf = 4;
    		msg("InitWave2x3");
    		ts.in.param = paramclass;
    		msg("InitWave2x4");
    		ts.in.devent = devent;
    		ts.in.endev = endev;
    		msg("InitWave2x5");
    		ts.in.bufko = 128 * 1024;
    		ts.in.freq = sample;
    		msg("InitWave2x6");
    		msg("InitWave3");
    		ret = _HSound_Init(&ts, &mcierror, name);
    		msg("InitWave4");
    		if (ret != nullptr)
    		{
    			msg("InitWave5");
    			_HSound_SetAcquireBuffer(ret, true, false);
    			msg("InitWave6");
    			_HSound_Padding(ret);
    			msg("InitWave7");
    		}
    		msg("InitWave8");
    	}
    }
     
     
    //crash
    void* initwave(int sample, int bits, int channel,char *name,int &mcierror, void *paramclass)
    {
    	msg("InitWave1");
    	void *ret = nullptr;
    	if (_HSound_Load())
    	{
    		msg("InitWave2");
    		msg("InitWave2x0");
    		THSound ts={0};
    		msg("InitWave2x1");
    		ts.sizecb = sizeof(ts);
    		msg("InitWave2x2");
    		ts.in.bits = bits;
    		ts.in.channel = channel==1? THSound_Channel::mono:THSound_Channel::stereo;
    		ts.in.nbuf = 4;
    		msg("InitWave2x3");
    		ts.in.param = paramclass;
    		msg("InitWave2x4");
    		ts.in.devent = devent;
    		ts.in.endev = endev;
    		msg("InitWave2x5");
    		ts.in.bufko = 128 * 1024;
    		ts.in.freq = sample;
    		msg("InitWave2x6");
    		msg("InitWave3");
    		ret = _HSound_Init(&ts, &mcierror, name);
    		msg("InitWave4");
    		if (ret != nullptr)
    		{
    			msg("InitWave5");
    			_HSound_SetAcquireBuffer(ret, true, false);
    			msg("InitWave6");
    			_HSound_Padding(ret);
    			msg("InitWave7");
    		}
    		msg("InitWave8");
    	}
    }
    Bizarre.

    Merci.

  2. #2
    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
    Il dit quoi le d�bogueur ?
    En particulier, d'o� vient le pointeur foireux.

  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
    En effet, �a devrait passer aussi avec le memset ou ={0} vu que ta structure semble �tre POD.

    Comme dit bacelar, essaie d'avoir plus d'infos sur l'erreur d'acc�s m�moire: L'adresse fautive, si c'est en lecture ou en �criture...
    Mais �a va n�cessiter soir le debugger, soit du Structured Exception Handling dans ton code non-manag�, parce que AccessViolationException ne contient pas ces informations.
    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 extr�mement actif
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    926
    D�tails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 926
    Par d�faut
    J'ai remplac� par des pointers 'new' et 'delete' et je n'ai plus ce probl�me.

  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 "tomb� en marche", alors le comportement ind�fini est toujours l� quelque part, comme un incendie qui couve.
    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.

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

Discussions similaires

  1. [reseaux] Lister les processus sur une machine donnée
    Par BEAUJAULT dans le forum Programmation et administration syst�me
    R�ponses: 2
    Dernier message: 29/07/2004, 15h55
  2. R�ponses: 8
    Dernier message: 13/07/2004, 09h00
  3. Savoir quel OS est installer sur une machine
    Par batmat86 dans le forum C++Builder
    R�ponses: 4
    Dernier message: 15/06/2004, 16h16
  4. Comment r�cup�rer la liste des logiciels install�s sur une machine ?
    Par david_chardonnet dans le forum API, COM et SDKs
    R�ponses: 3
    Dernier message: 19/09/2003, 17h41
  5. [D�butant] Connexion sur une machine distante prot�g�e
    Par arthix dans le forum D�veloppement
    R�ponses: 3
    Dernier message: 28/08/2003, 09h46

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