首页 > 系统相关 >动态内存(c)

动态内存(c)

时间:2024-11-09 23:17:50浏览次数:3  
标签:malloc 函数 free 动态内存 空间 指针

大家好,今天我们就来聊聊c语言中动态内存的一些知识,相信大家很多时候在申请空间时总会有空间不够用或者太大用不完的情况吧,这个时候使用动态内存就是一个不错的选择,下面我们便来了解一下。

1.malloc函数

这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针,注意并不是每次开辟空间都会成功,如果成功就返回一个开辟好空间的指针,失败则会返回一个空指针,因此使用malloc时一定要对它的返回值做检查。

malloc返回值是一个泛型指针,这个指针是什么类型由使用者决定(强制类型转换)。

如果你申请0个字节空间,malloc的行为是未定义的,取决于编译器。

我们申请完空间来使用后,如果不需要使用时便要释放空间。

53085cff618e4e73801f4b240fb964e0.png

 

2.free函数

这个函数就是用于释放空间的,参数为我们申请空间的那个指针(释放后最好将指针置为空指针避免成为空指针)。

当然使用free时有几个误区要注意一下

一.如果参数ptr指向的空间不是动态开辟的,那free函数的行为是未定义的,如果参数ptr是空指针,那么free函数什么都不做。

d0044b60514343bab6ad0a9c6585d054.png

 87dd338b43f249e7972a5c728d010a59.png

 

二.使用free函数时应避免多次释放,造成系统崩溃。

 af7c3a3936bb46c7a64733887e0dda98.png

 

那么今天分享就到这里,明天给大家讲讲另外两个和内存泄露的知识点。

谢谢大家的阅读!!!

f9cbd50d89024a40b8b9907561d832fb.png

 

标签:malloc,函数,free,动态内存,空间,指针
From: https://blog.csdn.net/2403_86949771/article/details/143610029

相关文章

  • 动态内存的相关知识点
    今天学了动态内存管理的相关知识点,首先什么是动态内存呢,我的理解是可大可小的,能够动态变化的。1.为什么存在动态内存分配我们已经掌握的内存开辟方式有:intmain(){ inta=10; intarr[10]={0}; intn; scanf("%d",&n); intarr1[n]; return0;}向上面......
  • 动态内存分配
    一、为什么要有动态内存分配二、malloc和free栈区中的数据出了作用域就会销毁;而静态区中数据的生命周期与全局变量一致,出了作用域也不会被销毁,直至程序结束后才会销毁。malloc函数与free函数需要包含的头文件是<stdlib.h>①malloc②free#include<stdio.h>#includ......
  • (C语言)动态内存管理,柔性数组
    1.为什么存在动态内存分配动态内存管理是C语言提供给我们自主维护空间大小的能力C语言提供了一个动态内存开辟的函数:void*malloc(size_tsize);这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。·如果开辟成功,则返回一个指向开辟好空间的指针。·......
  • c语言:动态内存管理中的malloc和free,calloc和realloc
    为什么要有动态内存分配?通过之前的学习,我们已经掌握的内存开辟方式有:inta=20;//在栈空间上开辟四个字节chararr[10]={0};//在栈空间上开辟10个字节的连续空间上述空间的开辟的大小是固定的数组在申明的时候,必须指定数组的长度,数组空间一旦确定了大小不能进行调整。......
  • string和初学指针和动态内存分配
    strcmp:原型定义于:<string.h>intstrcmp(constchar*str1,constchar* str2)比较的标准是ASCII从第一个字符开始比,直到遇到不同的字符或者返回NULL(0)若STR1[I]>STR2[I],返回1若STR1[I]<STR2[I],返回-1若STR1[I]=STR2[I],返回0strcpy:原型定义于<string.h>常用于字符串......
  • 动态内存管理详解
    目录1.为什么要有动态内存分配2.malloc和free2.1malloc2.2free3.calloc和realloc3.1calloc3.2realloc4.常⻅的动态内存的错误4.1对NULL指针的解引⽤操作4.2对动态开辟空间的越界访问4.3对⾮动态开辟内存使⽤free释放4.4使⽤free释放⼀块动态开辟内存的......
  • C语言:动态内存管理
    目录为什么要有动态内存管理mallocfreecallocrealloc为什么要有动态内存管理内存分为栈区、堆区、静态区,每个区存放的变量如下图:目前我们掌握的内存开辟方法有:创建结构体structs{inti;intc;};创建一些变量:intx;intu[10];charl;还有创建联合等…......
  • 动态内存管理(下)
    目录常见的动态内存的错误对NULL指针的解引用操作对动态开辟空间的越界访问对非动态开辟内存使用free释放使用free释放⼀块动态开辟内存的一部分对同一块动态内存多次释放动态开辟内存忘记释放(内存泄漏)柔性数组柔性数组的特点柔性数组的使用柔性数组的优势感谢各位......
  • 动态内存管理 (上)
    目录1.为什么要有动态内存分配 2.malloc和free2.1malloc2.11malloc申请空间和数组的空间有什么区别呢?2.2free3.calloc和realloc3.1calloc 3.2realloc 4.常⻅的动态内存的错误4.1对NULL指针的解引⽤操作4.2对动态开辟空间的越界访问 4.3对⾮动态开......
  • 【C语言】动态内存管理(上)
    本篇博客将讲解以下知识点:(1)为什么要有动态内存分配(2)malloc和free1、为什么要有动态内存分配我们已经掌握的内存开辟方式有:intval=40;//向内存中申请4个字节空间存储valchararr[10];//向内存申请10个字节空间 上述的开辟空间的方式有两个特点:(1)空间的开辟......