动态内存管理以及常见错误

本文介绍了动态内存管理的重要性,包括malloc、free、calloc和realloc等函数的使用。同时,重点讨论了动态内存管理中常见的错误,如未判空、越界、误用free、未完全释放、重复释放和未释放空间,这些错误可能导致内存泄漏,严重时影响程序甚至服务器的稳定性。
摘要由CSDN通过智能技术生成

存在的意义

我们的内存开辟方式主要是:

int a=0;//开辟4字节的空间
int arr[5]={
   0};//开辟20字节的空间

这样开辟存在着几个问题:
由于变量开辟是在内存中的栈中,空间比较有限。
只能开辟固定的内存空间,不方便后续调整。
在特定的场景下我们并不能获取需要开辟的内存大小。

所以我们有动态开辟空间来解决一些特定情景下的问题。

1.不能确定需要的内存大小,或者是一个变化的内存大小
2.可以开辟较大的空间来操作(动态开辟的内存空间在内存堆上,空间大于变量所在的栈空间)
3.不过虽然很好,但是动态开辟的内存空间需要我们申请的人主动释放,否则会造成严重的内存泄漏。

内存泄漏可以说是一个很致命的问题,尤其是在一些连续运行的地方,如服务器代码。严重的会导致服务器瘫痪。

  1. 栈区(stack):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些
    存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有
    限。 栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返回地址等。
  2. 堆区(heap):一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。分配方式类似
    于链表。

相关函数

1.malloc

C语言提供了一个动态内存开辟的函数:

void* malloc(size_t  size);
//size是指开辟空间的字节数

这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。

1.开辟成功,则返回一个指向所开辟空间的指针。失败返回NULL;
2.返回值泛型,所以我们可以自己决定。
3.如果参数 size 为0,malloc的行为是标准是未定义的.

我们一般使用malloc的这样用:

int* arr=(int*)malloc(4);

int a[5]={
   0};
char* arr1=(char*)malloc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值