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

Windows Discussion :

Fuite mémoire, que libérer ?


Sujet :

Windows

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 25
    Points : 27
    Points
    27
    Par défaut Fuite mémoire, que libérer ?
    Bonjour,

    Je dois avoir du mal pour libérer mes structs, pointeurs et autre parce que mon programme a de grosse fuite mémoire (quelques giga en quelques secondes). Je crois avoir isoler le probleme dans ces deux fonctions, pouvez vous m'aider a me montrer ce que j'ai oublié de libérer et comment les libérer.

    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
    BITMAP take_screenshot()
    {
    	HDC hCaptureDC = CreateCompatibleDC(hDesktopDC);
    
    	HBITMAP hCaptureBitmap =CreateCompatibleBitmap(hDesktopDC, 
    							nScreenWidth, nScreenHeight);
    	SelectObject(hCaptureDC,hCaptureBitmap); 
    	BitBlt(hCaptureDC,0,0,nScreenWidth,nScreenHeight,
    		   hDesktopDC,0,0,SRCCOPY|CAPTUREBLT); 
    
      //Get Cursor Pos
      POINT xPoint;
      GetCursorPos( &xPoint );
    
      //Draw the Cursor
      bool g_recordcursor = 1;
      if (g_recordcursor == 1) {
        BOOL ret;
        CURSORINFO cinfo;
    	cinfo.cbSize = sizeof(CURSORINFO);
    	ret = GetCursorInfo(&cinfo);
    
    	DrawIcon( hCaptureDC,  cinfo.ptScreenPos.x,  cinfo.ptScreenPos.y, cinfo.hCursor);
    
      }
    
    	HBITMAP hNewBitmap = (HBITMAP)SelectObject(hCaptureDC, hCaptureBitmap);
    
    	BITMAP bm;
    	ZeroMemory(&bm,sizeof(BITMAP));
    	GetObject(hNewBitmap, sizeof(bm), &bm);
    
    	int bm_size = bm.bmWidthBytes * bm.bmHeight;
    	bm.bmBits = new char[bm_size];
    	long nfetched = GetBitmapBits(hCaptureBitmap, bm_size, bm.bmBits);
    
    	DeleteDC(hCaptureDC);
    	DeleteObject(hCaptureBitmap);
    	DeleteObject(hNewBitmap);
    	
    
    	return bm;
    }
    
    static void fill_yuv_image(AVFrame *pict, int frame_index, int width, int height)
    {
    	BITMAP bm = take_screenshot();
    
    	SwsContext *fooContext = sws_getContext(nScreenWidth,nScreenHeight,PIX_FMT_RGB32,
    											width,height,STREAM_PIX_FMT,
    											sws_flags,NULL,NULL,NULL);
    
    	uint8_t *movie_dib_bits = reinterpret_cast<uint8_t *>(bm.bmBits);
    
    	int dibrowbytes = bm.bmWidthBytes;
    
    	uint8_t* data_out[4];
    	int stride_out[4];
    	data_out[0] = movie_dib_bits;
    
    	stride_out[0] = dibrowbytes;
    
    	sws_scale(fooContext,data_out,stride_out,0,nScreenHeight,pict->data,pict->linesize);
    
    	// A partir d'ici j'ai besoin de plus rien sauf pict
    	free(movie_dib_bits);
    	DeleteObject(&bm);
    }
    Merci !

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Je n'ai pas le temps de voir en détails, mais pour ce qui est des SelectObject() et compagnie, ceci devrait pouvoir t'aider:
    http://www.developpez.net/forums/d58...e/#post3462676
    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. [tomcat][memoire] java.net.URL et fuite mémoire
    Par Seiya dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 09/03/2009, 10h41
  2. [AJAX] Que faire contre les fuites mémoires (memory leaks)
    Par cassy dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/08/2007, 16h50
  3. Outil de recherche de fuite mémoire
    Par eag35 dans le forum MFC
    Réponses: 4
    Dernier message: 02/02/2005, 12h46
  4. [SWT]SWT et fuite mémoire(ou pas)
    Par menuge dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 22/06/2004, 21h40
  5. [debug] fuites mémoires
    Par tmonjalo dans le forum C
    Réponses: 3
    Dernier message: 28/07/2003, 17h20

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