📜  malloc()与新(1)

📅  最后修改于: 2023-12-03 15:32:48.399000             🧑  作者: Mango

malloc()与new

介绍

在程序中,动态内存管理往往是非常必要的。动态内存管理通常需要在程序运行时利用malloc()或new进行内存的分配与释放。

malloc()
void* malloc(size_t size);

malloc()函数用于在堆上动态地分配一段内存,并返回指向这段内存的指针。它的基本用法如上所示:需要传入一个size_t类型的参数,表示需要分配内存的大小。如果分配成功,malloc()会返回一个指向分配的内存的指针;否则返回NULL

下面是一个简单的例子,演示了如何使用malloc()

int* arr = (int*) malloc(sizeof(int) * 10);

该例子中,arr是一个int指针,sizeof(int) * 10表示需要分配10个int类型的内存空间。如果分配成功,arr将会指向这段空间的首地址。需要注意的是,malloc()返回的指针指向的内存中的值不一定是0,并且不会自动释放。

为了防止内存泄漏,在使用完之后需要手动调用free()函数释放分配的内存:

free(arr);
new
int* arr = new int[10];

new是C++中的关键字,用于在堆上动态地分配一段内存,并返回指向这段内存的指针。它的使用方式与malloc()类似,只是在C++中使用时更为方便。

下面是一个简单的例子,演示了如何使用new

int* arr = new int[10];

该例子中,arr是一个int指针,new int[10]表示需要分配10个int类型的内存空间。如果分配成功,arr将会指向这段空间的首地址。需要注意的是,new返回的指针指向的内存中的值会自动初始化为0。

同样地,在使用完之后需要手动调用delete[]函数释放分配的内存:

delete[] arr;
区别
  1. malloc()是C语言中的函数,而new是C++中的关键字。
  2. malloc()在C++中仍然可以使用,但是需要将返回的指针进行强制类型转换。而new则可以直接使用,不需要进行强制类型转换。
  3. new会自动初始化分配的内存空间为0,而malloc()则不会,返回的值是未定义的。
  4. 在使用上,malloc()需要在分配内存的同时指定分配的大小,而new则可以在分配内存的同时进行初始化。
  5. 在释放内存时,malloc()使用free()函数,而new则使用deletedelete[]函数。
总结

无论是使用malloc()还是new,动态内存管理都是非常重要的,需要手动管理好每一个内存的分配和释放。在使用上需要注意每个函数的用法与之间的区别,防止出现内存泄漏等问题。