C++, libération après un new

niqo -  
 niqola -
J'ai l'erreur "access violation" quand je fais
image = new CImage();
puis plus tard
delete image; // erreur

Si vous avez des pistes.... Merci d'avance

Mon code:

MyDoc.cpp:
image=new CImage();
...
delete image; // erreur "Access Violation
...



image.cpp:
CImage::~CImage()
{
if(m_Bits)
delete m_Bits;
if ( m_hDrawDib )
DrawDibClose ( m_hDrawDib );
}

image.h:

...
public:
CImage();
~CImage();
....

3 réponses

  1. pouet
     
    salut,

    je ne vois rien d anormal, mais il serait interessant de regarder si ca plante sur ton delete m_Bits ou sur ton DrawDibClose ou...
    0
  2. Edno
     
    Goethe t'a donné la réponse sur le forum de www.developpez.com

    [Citation]
    il faut faire :

    CImage* image;
    image = new(CImage); // et pas de new Cimage();
    0
  3. niqola
     
    Merci, j'ai changé le new, mais j'ai toujours l'erreur sur le delete. Cela est peut-être dû au fait que l'image est utilisée dans MyView.cpp .
    Voici mon code plus en détail:

    Si vous avez des pistes.... Merci encore

    Mon code:

    MyDoc.cpp:
    ...
    CImage *image
    image=new(CImage);
    ...
    delete image; // erreur "Access Violation

    ...

    image.cpp:
    CImage::CImage()
    {
    // On initialise la classe
    m_largeur = 0;
    m_hauteur = 0;
    m_Bits = NULL;
    // On ouvre la Dib
    m_hDrawDib=DrawDibOpen();
    }


    CImage::~CImage()
    {
    //if(m_Bits)
    // delete m_Bits; // en commentaire sinon crée une erreur
    if ( m_hDrawDib )
    DrawDibClose ( m_hDrawDib );
    }


    image.h:
    ...
    public:
    CImage();
    ~CImage();
    ....
    0