The Difference Between malloc and new

The Difference Between malloc and new
  1. Memory Allocation and Initialization

Both malloc and new allocate memory on the heap, but:

  • malloc only allocates memory without initialization.
  • new allocates memory and initializes it.

Examples:

  • new int(10) → Allocates an int and initializes it to 10.
  • new int[10]() → Allocates an int array of size 10 and initializes all elements to 0.
  1. Usage and Return Type

Code examples:

int *p1 = (int *)malloc(sizeof(int));  // malloc: cast required​
int *p2 = new int(2);                  // new: initializes single int to 2​
int *p3 = new int[100](0);             // new: array of 100 ints (all 0)

Execution output:

1​
2​
3
  • malloc is a function:
  • Requires specifying the number of bytes (e.g., malloc(100) for 100 bytes).
  • Returns a void* pointer (needs explicit casting to the target type).
  • new is an operator:
  • Requires specifying the data type (not byte count).
  • Returns a pointer of the specified type directly (no casting needed).
  1. Error Handling and Underlying Logic
  • malloc returns null if allocation fails.
  • new throws a bad_alloc exception on failure (must be caught to check success).
  • new internally calls operator_new, which uses malloc for allocation but adds initialization. For classes, this means calling the constructor.
  1. Memory Deallocation
  • Memory from malloc is freed with free().
  • Memory from new is freed with:
  • delete for single objects (e.g., delete p2;).
  • delete[] for arrays (e.g., delete[] p3;).
  1. Allocation Variants
  • malloc has only one allocation method.
  • new has four variants:
  1. Ordinary new
  2. const new
  3. Placement new (allocates at a specific memory address)
  4. nothrow new (returns null instead of throwing exceptions on failure)

你可以直接修改上述内容中的文本、代码示例或格式,根据需要调整细节。

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *