4 ms·
One small nitpick: you don't need check before `free` call, using `free(NULL)` is fine.
by vbezhenar 8mo ago
One small nitpick: you don't need check before `free` call, using `free(NULL)` is fine.
- jagged-chisel 8mo agoBut it does keep one in the habit of using NULL checks.
- david-gpu 8mo agoIt is pointless, because in Linux all you get is a virtual address. Physical backing is only allocated on first use. In other words, the first time you access a "freshly allocated" non-null pointer you may get a page fault due to insufficient physical memory.
- 3836293648 8mo agoBy default, yes. You can configure it to not overcommit
- david-gpu 8mo agoRight, but as a programmer you rarely have control over that. And even if you do, you often can't handle out of memory errors gracefully. Thus, for a typical situation it is reasonable to log the error and bail out, rather than adding extra custom error handling around every single memory allocation, which ends up being code that is never tested.
- t43562 8mo agoYou're right that it's not needed in my example but sometimes the thing that you're freeing has pointers inside it which themselves have to be freed first and in that case you need the if. There are several other issues I haven't shown like what happens if you need to free something only when the return code is "FALSE" indicating that something failed. This is not as nice as defer but up till now it was a comparatively nice way to deal with those functions which were really large and complicated and had many exit points.
- Arch-TK 8mo agoIf you have something which contains pointers, you should have a destructor function for it, which itself should check if the pointer is not NULL before attempting to free any fields.
- t43562 8mo agoThat's certainly one way to do it if you're writing all the code.
- Arch-TK 8mo agoIf you have something which doesn't come with such a function, nothing stops you writing it?
- 1718627440 8mo agoWe are talking about C. A destructor function in C is a function that gets called when the library gets unloaded. No you shouldn't have a destructor function for it.
- Arch-TK 8mo agoThe C language has no such concept of attribute destructor and I am not talking about attribute destructor. I just mean, in the simple English sense, a function which exists to deallocate a structure.