18.C/C++动态内存分配详解:从malloc到new避免内存泄漏

一、前言

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);
作者:余识
全部文章:0
会员文章:0
总阅读量:0
c/c++pythonrustJavaScriptwindowslinux