Should I free all my mallocated memory when I am exiting program in the due of error?
something = (char**) malloc (x * sizeof(char*));
for (i = 0; i < x; i++)
something[i] = (char*) malloc (y + 1);
...
if (anything == NULL) {
printf("Your input is wrong!");
// should I free memory of every mallocated entity now?
exit(1);
}
else {
// work with mallocated entities
...
free(something); // it must be here
system("pause);
}
This is actually a really hard, imponderable question.
Pro (in favor of freeing everything before exit):
Con (just exit, don't worry about freeing everything):
And, one more point (not sure if it's a pro or a con): on the majority of systems, calling free
does not return memory to the Operating System (only exiting does that).
In the end, you will have to decide which of these pros and cons matters most for you. Different programmers on different projects under different circumstances will reach different conclusions; there is no one-size-fits-all answer here.
See also this previous Stack Overflow question. See also question 7.24 in the C FAQ list.