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

MFC Discussion :

Probleme de mémoire


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Par défaut Probleme de mémoire
    Bonjour,
    j'ai réalisé un programme de traitement de video sur XP
    Il marchait sans probleme , depuis j'ai acheter un nouveau pc , je suis passé sous vista et la mon programme ne veut plus marcher.
    Il affiche bien la video mais par exemple lorsque je lance ma fonction erosion il me met une erreur de type:
    Exception non gérée à 0x004146d1 dans CaptureVideo.exe*: 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x03dd7001.

    mon programme bloque 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
    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
    LPVOID CALLBACK CCaptureVideoDlg::EROSION(HWND hWndC, LPVIDEOHDR pV)
    {
    long p,i,j,c,l,cc,ll;
        long Taille = pDial->m_largeur * pDial->m_hauteur;
    
        int tc,tl;
        tc=1;
        tl=1;
        BYTE min;
    
        // passage en niveau de gris
        BYTE *pImNb;
        pImNb=(BYTE *) malloc(Taille);
        BYTE *pTemp;
        pTemp=(BYTE *) malloc(Taille);
        i=0;
    for (j=0;j<Taille;j++) 
        {
        ici->    pImNb[j]=(pV->lpData[i]+pV->lpData[i+1]+pV->lpData[i+2])/3.0;
            i+=3;
            pTemp[j]=0;
        }
    for (l=tl;l<pDial->m_hauteur-tl-1;l++)
        {
            for (c=tc;c<pDial->m_largeur-tc-1;c++)
            {
                min=255;
                for (ll=l-tl;ll<=l+tl;ll++)
                {
                    for (cc=c-tc;cc<=c+tc;cc++)
                    {
                        p=pDial->m_largeur*(ll)+cc;
                        if (pImNb[p]<min) min = pImNb[p];
                    }
                }
                pTemp[pDial->m_largeur*l+c]=min;
            }
        }
    
        
        i=0;
        for (j=0;j<Taille;j++)
        {
    ici->    pV->lpData[i]=pTemp[j];
            pV->lpData[i+1]=pTemp[j];
            pV->lpData[i+2]=pTemp[j];
            i+=3;
        }
        free(pImNb);
        free(pTemp);
        return 0;
    }
    je n'arrive vrt pas a resoudre cette erreur.Si quelqu'un sait resoudre de probleme merci de son aide.

    pense à utiliser la balise de code, Merci Farscape

  2. #2
    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
    Par défaut
    [Préambule]
    1/En C++, on évite les malloc/free au profit des new/delete.
    2/ long Taille = pDial->m_largeur * pDial->m_hauteur: pDial n'est pas défini?
    3/ pImNb est BYTE et ensuite tu utilises une division réelle (/3.0).
    [/Préambule]
    As-tu vérifier si tu n'as pas un débordement pV->lpData[i] ou un pV invalide?

  3. #3
    Membre habitué
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Par défaut
    pDial est définie au tout début: CCaptureVideoDlg *pDial
    Je voulais savoir si Vista limité la capacité d'allocation de mémoire car sur Xp je n'ai aucun problème.
    mon programme s'arrête lorsque j=206162
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for (j=0;j<Taille;j++) 
    	{
    		pImNb[j]=(pV->lpData[i]+pV->lpData[i+1]+pV->lpData[i+2])/3.0;
    		i+=3;
     
    		pTemp[j]=0;
    	}
    Je pense pas avoir de pV invalide ,y aurait il une autre manière d'allouer de la memoire?

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    les limitations sont les mêmes ,
    ton bug ressort parce que les conditions de test (environnement ) changent.
    accès violation c'est que tu accèdes à une plage mémoire invalide.
    soit ton allocation mémoire n'est pas correcte soit ton indicage est hors limite.

  5. #5
    Membre habitué
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Par défaut
    Comment je fais pour résoudre ce problème?
    Mon allocation mémoire marche sur Xp mais pas sur vista?

  6. #6
    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
    Par défaut
    Probablement que le bug était présent sur XP mais les conséquences n'étaient pas visibles. Au vue du code que tu as posté, je dirais qu'il faut que tu investigue sur les valeurs prises à l'exécution pour voir si elles restent dans le domaine que tu pensais ou pas.
    Ensuite, tu peux ajouter plus de contrôle lors de l'indexation de tableaux pour vérifier qu'ils sont adressés correctement: par exemple en les encapsulant dans une classe qui serait 'safe' par rapport aux dépassement des limites.

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/11/2007, 18h02
  2. probleme de mémoire
    Par beLz dans le forum C
    Réponses: 6
    Dernier message: 10/07/2007, 21h05
  3. probleme de mémoire : Java heap space
    Par Seb33300 dans le forum Interfaces Graphiques en Java
    Réponses: 10
    Dernier message: 21/02/2007, 13h40
  4. Réponses: 1
    Dernier message: 16/01/2007, 10h21
  5. Probleme de mémoire avec FireBird
    Par NicolasR dans le forum Bases de données
    Réponses: 2
    Dernier message: 19/05/2006, 16h28

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