[SOLVED] Some questions about memory leaks
-
Like SGaist said what you describe is memory corruption, not a memory leak.
Memory leak occurs when any part of memory you allocated becomes inaccessible (nothing pointing to it anymore). Most of the cases is caused by forgotten delete.
Memory corruption occurs when you overwrite by mistake something you're not suppose to and this makes app behavior unpredictable. These are the hardest to find, because their symptoms usually are random or occur in totally unrelated (seemingly) parts of the program.There are many types of memory corruption. Some examples:
@
int a[3];
a[3] = 42; //buffer overrun
int* b;
b = 42; //use of uninitialized pointer
int c;
int d = 2c; //use of uninitialized variable
int* e = sumeFunc();
e = 42; //use of potentially null pointer
intf = new int();
delete f;
*f = 42; //accessing destroyed variable//and many more
@My usual method to hunt these is to first fish for any bugs. Often by fixing one bug you fix 3 more you didn't know about and spot one or two other/related.
There are tools that can help to some extent. For example "VLD":https://vld.codeplex.com/ has been invaluable to me for detecting memory leaks. While not directly causing segfaults, fixing these often lead you to spotting a potential memory corruption. Another useful tool I use is "cppcheck":http://cppcheck.sourceforge.net/ - a tool for static analysis of the code. It can spot many logical, structural and syntactical problems in your code before you even compile it. Depending on the tools you use, your compiler or IDE might offer some help too. For example MSVC offers "SDL":http://msdn.microsoft.com/en-us/library/jj161081.aspx switch to the compiler which helps detect things like use of uninitialized variables and pointers and buffer overrun errors. -
vld is a library, so it's pretty much as any other library.
cppcheck is an external program. It doesn't know about your IDE (creator). You just point it to where you keep your project.
sdl is a compiler switch so you just pass it to the compiler in your .pro file -
Yeah, the tools I listed are all for windows (that's what I'm on mostly).
Clang has some nice tools I heard. Maybe this one: "clang static analyzer":http://clang-analyzer.llvm.org/
-
Ok I'll look at it.
While messing about in my program I noticed something odd and possibly important. When I try to manipulate the Qlist in my nbhistory.h/cpp file, I get a crash. However if I do the EXACT SAME operations to a QList in my mainview.h/cpp file, it works and I don't get a crash. The biggest difference between these two files is that nbhistory.h/cpp contains multiple classes, while mainview.h/cpp contains only one. Could this have something to do with it? Why would a QList work in one file but not another?
-
cppcheck is available on OS X using e.g. macports
-
Well again - it might, it might not have something to do with the bug. It might be a coincidence if one of those "multiple" classes happens to overwrite something somewhere.
No point in asking us that sort of questions I think. Without looking at the actual code we're as good as guessing.
-
Sounds weird that it would help. Maybe you just covered it up, but ok, great.