It's possible SDL has memory leaks. Especially 1.3 being as it's still a wip, and especially the more obscure corners of SDL. If OpenGL has memory leaks that's either an issue with your drivers or your code. Again more likely if you use deprecated or obscure functions...
Of course it's also likely you're losing track of a surface or something somewhere in your program. If you're using smart pointers like c++0x/boost's shared_ptr which use reference counting, a common problem people miss is if A has a smart reference to B and B has a smart reference to A, then A and B won't automatically be deleted.
Which means if obj A has a surface, and points to obj B, and obj B has a surface and points to obj A...yeah, that's two surfaces as well as the rest of obj A and obj B's data leaked unless you know this is going to happen so have code to deal with it before-hand.
Of course Ockham's Razor says the simplest explanation is the best, and you've made an easy-to-make minor fuck-up is simpler than your driver developers or the SDL developers have made a major fuck-up xD