开发者

How to handle free() errors in C?

开发者 https://www.devze.com 2023-03-16 15:06 出处:网络
Suppose that I have used a free() function to free a memory that,for many reasons, I\'m not allowed to.

Suppose that I have used a free() function to free a memory that,for many reasons, I'm not allowed to. How can I stop my C application from crashing and just generate an error and continue the execution? I d开发者_StackOverflowon't have try-catch kind of provision here (like C++/java...). Is there any way to ignore this error and continue execution?

If yes,

  1. How do you do that?
  2. More importantly, is it advisable to do so (continuing execution considering this memory error occurred)?

Thank you


It's certainly not advisable. Even if your program's version of free correctly detects that the memory you're trying to free cannot be freed, and thus doesn't do any harm itself, you still have a bug in your program — part of the program thought it owned that memory. Who knows what it might have tried to do with that memory before freeing it? Find and fix the bug. Don't just sweep it under the rug.


There is nothing in the C standard that you can use to do what you want. The description of the free function is very clear on that (§7.20.3.2 in C99):

The free function causes the space pointed to by ptr to be deallocated, that is, made available for further allocation. If ptr is a null pointer, no action occurs. Otherwise, if the argument does not match a pointer earlier returned by the calloc, malloc, or realloc function, or if the space has been deallocated by a call to free or realloc, the behavior is undefined.


Freeing invalid memory is a serious bug and should be fixed, as it's possible to corrupt the state of your program. Try using a tool like valgrind to spot what's going wrong.

The only pointers you should be using free on are those you receive from malloc, calloc or realloc or NULL pointers. Further you shouldn't use free on the same pointer more than once.

0

精彩评论

暂无评论...
验证码 换一张
取 消