• Advertisement
Sign in to follow this  

SDL_FreeSurface and segfault

This topic is 1919 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hello,

I I have a verry bad problem.

In my draw.h :

[source lang="cpp"]class CDraw : public CGraphic
{

public :

// constructor
CDraw(const float& coef_resol_);

...

private :
SDL_Surface *destimg;
}[/source]

In my draw.cpp :

[source lang="cpp"]CDraw::CDraw(const float& coef_resol_) : CGraphic({0, 0}, coef_resol_), texture(NULL), destimg(NULL) {
}

void CDraw::~CDraw() {
if(surface)
SDL_FreeSurface(surface);

/* segfault with it :-( */
if(destimg)
SDL_FreeSurface(destimg);
}
[/source]

Well in all lines in draw.cpp, i'm not working with destimg. i commented all destimg. I have only destimg(NULL) and if(destimg) SDL_FreeSurface(destimg);

With gdb, with a break point before the if(destimg) i have :

(gdb) print destimg
$2 = (SDL_Surface *) 0x766177

And next a SEGFAULT.

I don t understand, thanks

Share this post


Link to post
Share on other sites
Advertisement
Two likely scenarios:
1) You write over the bounds of memory somewhere, thereby trashing the CDraw object and writing an invalid destimg pointer over the 0.
2) You are destroying an invalid CDraw object. Either because you delete the same object twice or you delete an uninitialized pointer.

Share this post


Link to post
Share on other sites
Solved thanks, i found a line with surface = destimg. Then i was calling SDL_FreeSurface two times on the same pointer.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement