简体   繁体   中英

c freeing malloc(0)

I am writing an application in c in which I'm allocating the memory needed for some arrays dynamically. I know that many of those arrays will need zero allocation. So, will there be a problem when I call free on them? eg free(malloc(0 * sizeof(int))); ? I know my application compiles and runs ok on my machine, but can I rely on this? Cheers!

You can safely free(malloc(0)) .

from man malloc :

If size is 0 , then malloc() returns either NULL , or a unique pointer value that can later be suc‐ cessfully passed to free() .

free:

If ptr is NULL , no operation is performed

malloc(0) may (this is implementation-defined) return a null pointer, or may return a new pointer each time you call it. In either case, the return value is valid to pass to free , since free(0) is a no-op anyway. However, due to some nasty issues with detecting and handling failure of realloc and disagreements between ISO C and POSIX, I would strongly advise you never to pass size 0 to malloc or realloc . You can always simply add +1 or |1 to the end of the argument to malloc , and then you're certain to get a unique pointer (different from the null pointer or the address of any other object) every time you call it.

Another reason not to use malloc(0) is that you have to always check the return value of malloc to detect failure, whereas malloc(0) can return a null pointer on success. This makes all of your error checking code more complicated since you have to special-case the non-error case where the size argument was 0.

malloc (一次)的结果free调用总是合法的。

Yes, free(malloc(0)) is guaranteed to work.

For a further discussion, see what's the point in malloc(0)?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM