Both the malloc() and the calloc() functions are used to allocate dynamic memory. Each operates slightly different from the other. malloc() takes a size and returns a pointer to a chunk of memory at least that big:
void *malloc( size_t size );
calloc() takes a number of elements, and the size of each, and returns a pointer to a chunk of memory at least big enough to hold them all:
There?s one major difference and one minor difference between the two functions. The major difference is that malloc() doesn?t initialize the allocated memory. The first time malloc() gives you a particular chunk of memory, the memory might be full of zeros. If memory has been allocated, freed, and reallocated, it probably has whatever junk was left in it. That means, unfortunately, that a program might run in simple cases (when memory is never reallocated) but break when used harder (and when memory is reused). calloc() fills the allocated memory with all zero bits. That means that anything there you?re going to use as a char or an int of any length, signed or unsigned, is guaranteed to be zero. Anything you?re going to use as a pointer is set to all zero bits. That?s usually a null pointer, but it?s not guaranteed.Anything you?re going to use as a float or double is set to all zero bits; that?s a floating-point zero on some types of machines, but not on all.
The minor difference between the two is that calloc() returns an array of objects; malloc() returns one object. Some people use calloc() to make clear that they want an array.
yes
becuse it provide larger area in heep part of memory
Internally,calloc calls malloc and then fills with zeros.Hence, two calls is required,one for allocating memory and another call to fill zero's.Hence,calloc is less efficient than malloc.
Garbage value is the value which is not useful to user.Even zero may be garbage value for users.Hence,filling zero's by calloc is of no use.
Also,memory allocated by any function is used only after initialising with user choice value.Hence,accessing memory before initialising is programmers mistake and not mistake of malloc.
1. malloc takes only the size of the memory block to be allocated as input parameter.
2. malloc allocates memory as a single contiguous block.
3. if a single contiguous block cannot be allocated then malloc would fail.
1. calloc takes two parameters: the number of memory blocks and the size of each block of memory
2. calloc allocates memory which may/may not be contiguous.
3. all the memory blocks are initialized to 0.
4. it follows from point 2 that calloc will not fail if memory can beallocated in non-contiguous blocks when a single contiguous blockcannot be allocated.
One more thing malloc() allocates continous bolck of memory, if not present it returns an error. Whereas calloc() allocates memory whereever it is present...
1. Both malloc() and calloc() are used to dynamically allocate memory on heap. 2. malloc() is used to allocate a single block of memory. 3. calloc() is used to allocate multiple blocks of memory. 4. It is better to use them when we are working on lists(linked lists, doubley linked lists etc..). 5. At the same time the user must be aware that in c, memory allocated on heap should manually deallocated by the user. 6. So, once the memory allocated on heap is of no use, we must deallocate the memory by using the free() function. This is must!!