一、前言
C/C++中内存分配是一个非常重要的话题,主要分为静态分配和动态分配两种。
其中静态分配并不需要我们操心,比如下面这样的代码:
int a;
char buf[100];
这实际上就是在分配一块内存,且是由编译器帮我们分配,会自动完成内存管理,所以我们不需要操心其会造成内存泄漏的问题。
真正需要我们注意的是动态内存分配,同时也是本文所要讲解的重点。
二、malloc与free
首先我们要了解是C语言的内存分配函数malloc
,而free
这个函数就是专门用来释放前者分配的内存的。
看到这里你应该就反应过来了:动态分配的内存是需要我们自己去释放的。
这一点非常的重要,因为如果你忘记了释放就会造成内存泄漏问题。
首先我们还是先来看看它的使用方法:
#include<iostream>
using namespace std;
char* fun(int size) {
char* buf = (char*)malloc(size);
strcpy_s(buf, size, "hello world");
return buf;
}
int main() {
char* buf = fun(100);
cout << buf << endl;
free(buf);
}
上面是一个很简单的示例,但却能与静态内存分配很好的区别开。
首先我定义了一个函数fun
,这个函数的目的是分配指定大小的内存,然后将一个字符串拷贝进去,最后将函数内部分配好的这块内存传出来交给外面打印,最后调用free
函数释放这块内存。
首先注意malloc
函数的使用方法,它只接受一个参数,那就是准备分配多大的内存,以字节为单位,并返回分配好的内存首地址。
char* buf = (char*)malloc(size);