首先我们需要了解一下什么是动态内存分配。你可以把内存看作一个公共资源,同在计算机上的程序都会对内存做出不同的需求。而动态内存分配就是在你的程序运行时向“内存管理员”申请需要使用的内存空间,这样不管你的程序运行时需要多少内存,都可以按需分配,以达到最优的内存使用效果。
好的,理论知识都讲完了,下面让我们来看看如何使用动态内存分配函数malloc和free。
- 花式调用malloc函数
我们先看一下如何调用malloc函数来分配一定大小的内存空间。其中,malloc函数的原型如下:
void* malloc(size_t size);
它的作用是在内存中分配一块连续的空间,分配的空间大小为size个字节,返回一个指向这块空间的指针。如果分配成功,指针指向的内存空间是未初始化的,所以在使用之前,需要手动对其进行初始化操作。
现在,我们为了方便,假设我们需要一个大小固定的数组,其中每个元素都是整型数据,那么为了分配一个这样的数组,我们需要调用malloc函数:
int* arr = (int*)malloc(sizeof(int) * 10);
这句话的意思是分配一个包含10个整型数据元素的数组,因为每个整型数据元素大小为4字节,所以总共分配了40字节的内存空间。注意,这里的malloc函数返回值是一个void*类型的指针,需要显式地将其转换成指向整型的指针。
那么,我们来看看如何在程序中使用这个数组:
int* arr = (int*)malloc(sizeof(int) * 10);
if (arr != NULL) // 判断分配是否成功
{
for (int i = 0; i < 10; i++)
{
arr[i] = i