c语言和c++中的动态内存申请与释放

简介: c语言和c++中的动态内存申请与释放

相信大家在做力扣题时,经常要用到动态内存申请吧😍😍😍


那么什么是动态内存申请呢?

在进程的地址空间中,代码区、常量区、全局数据区的内存在程序启动时就已经分配好了,它们大小固定,不能由程序员分配和释放,只能等到程序运行结束由操作系统回收。这称为静态内存分配,我们平常在主函数里定义的各种变量基本上都是属于这类哈😉。


栈区和堆区的内存在程序运行期间可以根据实际需求来分配和释放,不用在程序刚启动时就备足所有内存。这称为动态内存分配😉。


为什么要用到动态内存申请呢?

相信大家在敲代码的时候,经常会遇到这种情况:不确定数组该定义多大,定义的大了是浪费内存,小了吧动不动就会出现数组越界,好犹豫啊!没关系动态内存申请就很好解决了这个问题,咱用多少他就能给咱分配多少:😀


那么怎样进行动态内存申请呢🤔,当然离不开我们的动态内存申请函数了。


malloc函数(这个主要用在c语言上)

原型:void* malloc (size_t size);


作用:在堆区分配 size 字节的内存空间。


返回值:成功返回分配的内存地址,失败则返回NULL。


注意:分配内存在动态存储区(堆区),手动分配,手动释放,申请时空间可能有也可能没有,需要自行判断,由于返回的是void*,建议手动强制类型转换🤪。例如:


int *p = (int *)malloc(1024);


这里malloc的传入参数为申请内存的字节数,返回值为申请到的内存的首地址,是什么类型的地址,就要强转成什么类型 ,这里的指针类型是整形,所以要强制类型转换(int*)🤣


这里的 p 代表的是申请到的内存,并且有效内存字节数为 1024。



如果我们要申请一个长度为 n  的整型数组的内存,可以这么写:


int *p = (int *)malloc( sizeof(int) * n );


 其中sizeof(int)表示的是一个int占用的字节数,那么一个长度为 n 的int类型的数组,需要的字节数自然就是 sizeof(int) * n 🤣,有相应的内存申请,就要有对应的内存释放。malloc函数对应的内存函数是free函数,比如当我们上面申请的指针 p 使用过了,我们就可以用free(p)释放我们刚才申请的内存🥰。

       tips:千万不要忘记及时释放内存呀!要是不释放的话,很容易造成内存泄漏这样严重的后果的😬

new和delete(多用于c++中)

在C++中,刚才说的malloc和free两个函数仍然可以使用,但是C++又新增了两个关键字,new 和 delete:new 用来动态分配内存,delete 用来释放内存。


用 new 和 delete 分配内存更加简单😍:


1.int *p = new int; //分配1个int型的内存空间

2.delete p; //释放内存


new 操作符会根据后面的数据类型来推断所需空间的大小。


如果希望分配一组连续的数据,可以使用 new[]:


1.int *p = new int[10]; //分配10个int型的内存空间

2.delete[] p;


用 new[] 分配的内存需要用 delete[] 释放,它们是一一对应的。


和 malloc() 一样,new 也是在堆区分配内存,必须手动释放,否则只能等到程序运行结束由操作系统回收。为了避免内存泄露,通常 new 和 delete、new[] 和 delete[] 操作符应该成对出现,并且不要和C语言中 malloc()、free() 一起混用😬。

在C++中,建议使用 new 和 delete 来管理内存,它们可以使用C++的一些新特性,最明显的是可以自动调用构造函数和析构函数🤗


好了,今天的内存申请就先讲这么多😜,今天算是我正式写的第一篇博客,内容还有很多不足之处还望各位码友见谅😝


不说了,要去干饭了🤪,大家在新的学期一起加油💪💪💪


下期预告:你真的会用排序函数吗?

相关文章
|
29天前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
31 3
|
1天前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
10 4
|
14天前
|
C语言
【c语言】动态内存管理
本文介绍了C语言中的动态内存管理,包括其必要性及相关的四个函数:`malloc`、``calloc``、`realloc`和`free`。`malloc`用于申请内存,`calloc`申请并初始化内存,`realloc`调整内存大小,`free`释放内存。文章还列举了常见的动态内存管理错误,如空指针解引用、越界访问、错误释放等,并提供了示例代码帮助理解。
26 3
|
20天前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
24天前
|
存储 C语言 C++
【C++打怪之路Lv6】-- 内存管理
【C++打怪之路Lv6】-- 内存管理
34 0
【C++打怪之路Lv6】-- 内存管理
|
30天前
|
编译器 程序员 C语言
深入C语言:动态内存管理魔法
深入C语言:动态内存管理魔法
|
16天前
|
存储 C语言
【c语言】字符串函数和内存函数
本文介绍了C语言中常用的字符串函数和内存函数,包括`strlen`、`strcpy`、`strcat`、`strcmp`、`strstr`、`strncpy`、`strncat`、`strncmp`、`strtok`、`memcpy`、`memmove`和`memset`等函数的使用方法及模拟实现。文章详细讲解了每个函数的功能、参数、返回值,并提供了具体的代码示例,帮助读者更好地理解和掌握这些函数的应用。
15 0
|
25天前
|
C语言
保姆级教学 - C语言 之 动态内存管理
保姆级教学 - C语言 之 动态内存管理
16 0
|
29天前
|
C++
C/C++内存管理(下)
C/C++内存管理(下)
46 0
|
29天前
|
存储 Linux C语言
C/C++内存管理(上)
C/C++内存管理(上)
35 0