Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]delete di oggetti com

    Ciao.
    Ho un applicazione c++ che effettua delle chiamate ad un api COM.
    Il problema è che mi ritrovo un sacco di memory leak.
    L'applicazione fa largo uso di SAFEARRAY , e non riesco a liberare la memoria .
    ad es :una volta allocata la memoria:

    codice:
    SAFEARRAY * pSAListBeamElementsMAX = SafeArrayCreate(VT_VARIANT,1,aDim);
    Come si fa il delete di un safearray?
    Grazie.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    SafeArrayDestroy
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    ho provato a mettere nel distruttore della classe che ua i saferray questo codice:
    codice:
    if(m_pSAListNamesJoint)
    		SafeArrayDestroy(m_pSAListNamesJoint);
    	if(m_pSAListNamesArea)
    		SafeArrayDestroy(m_pSAListNamesArea);
    	if(m_pSAListNamesBeamObj)
    		SafeArrayDestroy(m_pSAListNamesBeamObj);
    	if(m_pSAListNamesSection)
    		SafeArrayDestroy(m_pSAListNamesSection);
    	if(m_pSAListNamesmaterialstion)
    		SafeArrayDestroy(m_pSAListNamesmaterialstion);
    	if(m_pSAOffsetI)
    		SafeArrayDestroy(m_pSAOffsetI);
    	if(m_pSAOffsetJ)
    		SafeArrayDestroy(m_pSAOffsetJ);
    	if(m_pSAListNamesStaticCase)
    		SafeArrayDestroy(m_pSAListNamesStaticCase);
        if(m_pSAListRunCase)
    		SafeArrayDestroy(m_pSAListRunCase);
        if(m_pSAListRunCaseValue)
    		SafeArrayDestroy(m_pSAListRunCaseValue);
    	if(m_pSAListNamesDynCase)
    		SafeArrayDestroy(m_pSAListNamesDynCase);
    	CoUninitialize();
    ma a volte mi ritorna quest'errore:

    Unhandled exception at 0x770f4fd1 in CMP.exe: 0xC0000005: Access violation reading location 0xcdcdcdd5.

    i safearray sono dichiarati cosi:
    codice:
    SAFEARRAY * m_pSAListNamesJoint;
    	SAFEARRAY * m_pSAListNamesArea;
    	SAFEARRAY * m_pSAListNamesBeam;
    	SAFEARRAY * m_pSAListNamesBeamObj;
    	SAFEARRAY * m_pSAListNamesBeamElements;
    	SAFEARRAY * m_pSAListNamesSection;
    	SAFEARRAY * m_pSAListNamesmaterialstion;
    	SAFEARRAY* m_pSAOffsetI;
    	SAFEARRAY* m_pSAOffsetJ;
    	SAFEARRAY* m_pSAListNamesStaticCase;
    	SAFEARRAY* m_pSAListRunCase;
    	SAFEARRAY* m_pSAListRunCaseValue;
    	SAFEARRAY* m_pSAListNamesDynCase;
    grazie Oregon

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Devi avere cura di impostare a NULL tutti i puntatori PRIMA di usarli e DOPO averli distrutti ...

    Ad esempio, nel costruttore scrivi

    codice:
    m_pSAListNamesArea = NULL;
    e nel distruttore

    codice:
    if(m_pSAListNamesArea)
    {
      SafeArrayDestroy(m_pSAListNamesArea);
      m_pSAListNamesArea = NULL;
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.