Hi, I am developing an embedded system using C. I have a limited memory, so I sometimes run into a problem whereby my system becomes totally trashed due to memory leakage. So I am asking for suggestions and recommendations about the sources of memory leakage and how I can avoid them.
I hope this article will help you http://mariusbancila.ro/blog/2010/07/12/how-to-find-the-source-of-memory-leaks/
Make sure that *EVERY* memory allocation is matched by a memory free, WITHOUT EXCEPTION. Then it won't leak.
I wish want to further the discussion. When we have something like this: Code: char myFunc(char* a, char* b) { ... } then, do we still have to make memory deallocation?
There is one situation where you need to free memory, which is where you have allocated it. If you have allocated it then you MUST deallocate it (when you've finished with it). If you have not allocated it then you MUST NOT deallocate it. That's all there is to it. It's good practice to allocate and deallocate memory within the same function wherever possible, e.g.: Code: void doSomething() { struct summat *newThing = malloc(sizeof(struct summat)); do_something_else(newThing); free(newThing); } If this isn't possible then it's a good idea to hand off memory management responsibility to a memory management class or family of functions, which would encapsulate the handling of that memory and make it all fairly easy to find, compared with splattering malloc calls all over the place.