In C programming, dynamic memory allocation allows us to allocate memory at runtime. Two commonly used functions for this purpose are malloc and calloc. While they may seem similar, there are important differences between the two. This article explores these differences with examples.
Key Differences Between malloc and calloc
| Feature | malloc | calloc |
|---|---|---|
| Full Form | Memory Allocation | Contiguous Allocation |
| Initialization | Does not initialize the allocated memory. Memory contains garbage values. | Initializes all allocated memory to zero. |
| Parameters | Takes a single argument: the number of bytes to allocate. | Takes two arguments: the number of blocks and the size of each block. |
| Performance | Slightly faster as it doesn’t initialize memory. | Slightly slower due to memory initialization. |
| Syntax | void* malloc(size_t size) | void* calloc(size_t n, size_t size) |
Syntax and Usage
malloc Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include <stdio.h> #include <stdlib.h> int main() { int *arr; // Allocating memory for 5 integers using malloc arr = (int *)malloc(5 * sizeof(int)); if (arr == NULL) { printf("Memory allocation failed\n"); return 1; } // Printing uninitialized values printf("Values in allocated memory:\n"); for (int i = 0; i < 5; i++) { printf("%d ", arr[i]); // Garbage values } // Free the allocated memory free(arr); return 0; } |
Output:
Values in allocated memory:
“Garbage Values”
calloc Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include <stdio.h> #include <stdlib.h> int main() { int *arr; // Allocating memory for 5 integers using calloc arr = (int *)calloc(5, sizeof(int)); if (arr == NULL) { printf("Memory allocation failed\n"); return 1; } // Printing initialized values printf("Values in allocated memory:\n"); for (int i = 0; i < 5; i++) { printf("%d ", arr[i]); // All values are 0 } // Free the allocated memory free(arr); return 0; } |
Output:
Values in allocated memory:
0 0 0 0 0

Discover the mind behind the innovations – Elon Musk by Walter Isaacson, now on Audible. Dive into the life of a visionary shaping our future!
View on Amazon
Key Takeaways
- Use
mallocwhen you don’t need the memory to be initialized and want faster allocation. - Use
callocwhen you need the allocated memory to be initialized to zero. - Both
mallocandcallocrequire you to explicitly free the memory using thefree()function to avoid memory leaks.
By understanding the differences between malloc and calloc, you can choose the right function for your specific use case. Proper use of these functions helps ensure efficient memory management in your programs.
