C语言:动态内存(一篇拿捏动态内存!)

2024-02-27 1013阅读

温馨提示:这篇文章已超过391天没有更新,请注意相关的内容是否还可用!

C语言:动态内存(一篇拿捏动态内存!)

目录

学习目标: 

为什么存在动态内存分配 

动态内存函数:

1. malloc 和 free

2. calloc

3. realloc

常见的动态内存错误:

1. 对NULL指针的解引用操作

2. 对动态开辟空间的越界访问

3. 对非动态开辟内存使用free释放

4. 使用free释放一块动态开辟内存的一部分

5. 对同一块动态内存多次释放

6. 动态开辟内存忘记释放(内存泄漏)

程序的内存开辟:

柔性数组:

柔性数组的使用:

柔性数组的优势:

 以上就是个人学习见解和学习的解析,欢迎各位大佬在评论区探讨!

感谢大佬们的一键三连! 感谢大佬们的一键三连! 感谢大佬们的一键三连!


学习目标: 

为什么存在动态内存分配? 动态内存函数的介绍: 1、malloc; 2、free; 3、calloc; 4、realloc; 5、常见的动态内存错误; 6、内存开辟; 6、柔性数组。

为什么存在动态内存分配 

一般的开辟空间的方式有两个特点:

1. 空间开辟大小是固定的。 2. 数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配         由于对空间的需求,不仅仅是上述的情况。有时候我们需要的空间大小在程序运行的时候才能知道, 那数组的编译时开辟空间的方式就不能满足了。 这时候就只能试试动态存开辟了。

动态内存函数:

1.malloc和free

void*  malloc (size_t size);                   size:内存块的大小(以字节为单位)。是无符号整型。 size_t 1.1 这个函数向内存申请一块 连续可用 的空间,并返回指向这块空间的指针。 1.2 如果开辟成功,则返回一个指向开辟好空间的指针。       如果开辟失败,则返回一个 NULL 指针,因此 malloc 的返回值 一定要做检查。 1.3 返回值的类型是 void* ,所以 malloc 函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。 1.4 如果参数 size 为 0 , malloc 的行为是标准是未定义的,取决于编译器。

 C语言提供了另外一个函数free,专门是用来做动态内存的释放和回收,函数原型如下:

void  free (void* ptr);                   ptr:指向先前分配有的内存块的指针。 1.1 free 函数用来释放动态开辟的内存。 1.2 如果参数 ptr 指向的空间不是动态开辟的,那 free 函数的行为是未定义的。 1.3 如果参数 ptr 是 NULL 指针,则函数什么事都不做。 1.4 malloc和free都声明在 stdlib.h 头文件中。
#include 
int main()
{
     //静态代码
     int num = 0;
     scanf("%d", &num);
     int arr[num] = {0};
     //动态代码
     int* ptr = NULL;
     ptr = (int*)malloc(num*sizeof(int));
     //判断ptr指针是否为空
     if(NULL != ptr)
     {
         int i = 0;
         for(i=0; i
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]