[SDL.Net] Crazy memory leak

Started by
2 comments, last by Topiary 11 years, 9 months ago
Hey guys, I have a program with a crazy memory leak (leaking ~20mb/s).
I've found the problem, but I can't seem to find a working alternative.

Basically, I have some code which runs on every third tick:

void Draw()
{
scenebmp.render(bmp, false); //render the current scene to a bitmap image
sceneSurface = new Surface(bmp); //create a new surface from updated bitmap image
window.BlitToScreen(sceneSurface); //send the new surface to the 'window' class to be blitted to the screen
}


'sceneSurface = new Surface(bmp);' is the line which is causing the leak. I have tried putting
sceneSurface.Dispose();
at the end of the code block, but it doesn't seem to have any effect.

What would be the best way to fix this?
Is there a way to update the Surface from a bitmap without creating a new Surface?

Thanks for any assistance.

EDIT: http://pastebin.com/3We9UdVz is the file which contains the problem
EDIT2: Solved by taking a different approach to rendering.
Advertisement

Hey guys, I have a program with a crazy memory leak (leaking ~20mb/s).
I've found the problem, but I can't seem to find a working alternative.

Basically, I have some code which runs on every third tick:

void Draw()
{
scenebmp.render(bmp, false); //render the current scene to a bitmap image
sceneSurface = new Surface(bmp); //create a new surface from updated bitmap image
window.BlitToScreen(sceneSurface); //send the new surface to the 'window' class to be blitted to the screen
}


'sceneSurface = new Surface(bmp);' is the line which is causing the leak. I have tried putting
sceneSurface.Dispose();
at the end of the code block, but it doesn't seem to have any effect.

What would be the best way to fix this?
Is there a way to update the Surface from a bitmap without creating a new Surface?

Thanks for any assistance.

EDIT: http://pastebin.com/3We9UdVz is the file which contains the problem
EDIT2: Solved by taking a different approach to rendering.


If you new, you must delete

did you try deleting the old scene before you created a new one? ie:
void Draw()
{
scenebmp.render(bmp, false); //render the current scene to a bitmap image
if (sceneSurface) {
delete sceneSurface;
}
sceneSurface = new Surface(bmp); //create a new surface from updated bitmap image
window.BlitToScreen(sceneSurface); //send the new surface to the 'window' class to be blitted to the screen
}

My Gamedev Journal: 2D Game Making, the Easy Way

---(Old Blog, still has good info): 2dGameMaking
-----
"No one ever posts on that message board; it's too crowded." - Yoga Berra (sorta)


[quote name='Shorty421' timestamp='1331793548' post='4922184']
Hey guys, I have a program with a crazy memory leak (leaking ~20mb/s).
I've found the problem, but I can't seem to find a working alternative.

Basically, I have some code which runs on every third tick:

void Draw()
{
scenebmp.render(bmp, false); //render the current scene to a bitmap image
sceneSurface = new Surface(bmp); //create a new surface from updated bitmap image
window.BlitToScreen(sceneSurface); //send the new surface to the 'window' class to be blitted to the screen
}


'sceneSurface = new Surface(bmp);' is the line which is causing the leak. I have tried putting
sceneSurface.Dispose();
at the end of the code block, but it doesn't seem to have any effect.

What would be the best way to fix this?
Is there a way to update the Surface from a bitmap without creating a new Surface?

Thanks for any assistance.

EDIT: http://pastebin.com/3We9UdVz is the file which contains the problem
EDIT2: Solved by taking a different approach to rendering.


If you new, you must delete

did you try deleting the old scene before you created a new one? ie:
void Draw()
{
scenebmp.render(bmp, false); //render the current scene to a bitmap image
if (sceneSurface) {
delete sceneSurface;
}
sceneSurface = new Surface(bmp); //create a new surface from updated bitmap image
window.BlitToScreen(sceneSurface); //send the new surface to the 'window' class to be blitted to the screen
}

[/quote]

His code is C# not C++
OMG For crazy memory leak - deleaker, valgrind, memcheck.... cool.png

This topic is closed to new replies.

Advertisement