I hope not to sound very foolish here, but does the NULL module actually require memory allocation or not when doing this:
TheNull = malloc(sizeof(NULL));
If true, how can something that has no memory allocated actually exist in the ram?
CodePudding user response:
If you use NULL as parameter of
malloc(sizeof()), does it returnNULL?
No, unless out-of-memory, like any other allocation.
NULL, the null pointer constant, does not have a particular type. It may be void *, int, long, or some integer type.
Avoid sizeof(NULL) as its size/type may differ from system to system.
CodePudding user response:
The expression is not in any other way related to any NULL module or NULL object. There is are no such things anyway.
NULL is just a useful definition for a null pointer constant.
Depending on the target, NULL is either defined as #define NULL ((void *)0) or #define NULL 0, or possibly some other zero integer constant.
Hence malloc(sizeof(NULL)) either attempts to allocate the number of bytes in an int or in a void pointer.
CodePudding user response:
TheNull = malloc(sizeof(NULL));
That doesn't allocate 0 bytes (because sizeof(NULL) isn't zero), but malloc(0) might. The standard says:
If size is zero, the behavior of malloc is implementation-defined. For example, a null pointer may be returned. Alternatively, a non-null pointer may be returned; but such a pointer should not be dereferenced, and should be passed to free to avoid memory leaks.
So, maybe a null pointer, maybe not.
If true, how can something that has no memory allocated actually exist in the ram?
The pointer returned from malloc might point to a piece of memory slightly larger than what you asked for. For example, if you ask for 1 or 2 bytes, you might get 8 (or even 16) bytes instead. A memory manager often only provides certain size memory blocks (for efficiency), and might require a minimum size so its own bookkeping can fit in a free'd block.
And if it returns an oversized block for 1 or 2 bytes, it could do that for 0 bytes as well.
