📅  最后修改于: 2023-12-03 15:32:48.399000             🧑  作者: Mango
在程序中,动态内存管理往往是非常必要的。动态内存管理通常需要在程序运行时利用malloc()或new进行内存的分配与释放。
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);
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;
malloc()
是C语言中的函数,而new
是C++中的关键字。malloc()
在C++中仍然可以使用,但是需要将返回的指针进行强制类型转换。而new
则可以直接使用,不需要进行强制类型转换。new
会自动初始化分配的内存空间为0,而malloc()
则不会,返回的值是未定义的。malloc()
需要在分配内存的同时指定分配的大小,而new
则可以在分配内存的同时进行初始化。malloc()
使用free()
函数,而new
则使用delete
或delete[]
函数。无论是使用malloc()
还是new
,动态内存管理都是非常重要的,需要手动管理好每一个内存的分配和释放。在使用上需要注意每个函数的用法与之间的区别,防止出现内存泄漏等问题。