首页 > 其他分享 >DAY5

DAY5

时间:2023-07-27 22:00:13浏览次数:31  
标签:malloc int realloc void DAY5 内存 size

堆上分配内存的相关函数

进行动态内存分配时常用的库函数

一:malloc函数

  1. 函数定义:void* malloc(size_t size)

参数是在heap里分配的内存空间的字节数大小,数据类型是size_t(正整数)

  1. 例:表示在堆上请求四个字节,我们把malloc返回的地址存入void指针变量

void *p = malloc(4);
  1. 常用:如下使用sizeof,它以字节的形式返回变量或者类型的大小(sizeof返回的大小*需要的单元数)

void *p = malloc(10*sizeof(int));
*p = 2;//这一条是错误的,我们不能解引用一个void指针
  1. 为了解引用,我们需要一个整型指针,我们这里做类型转换

int *p = (int*)malloc(10*sizeof(int));
*p = 2//这条就可执行

calloc函数

  1. calloc函数的定义:void* calloc(size_t num, size_t size)

calloc接收两个参数,第一个参数是特定类型的元素数量,第二个参数是类型的大小

  1. 例:

    int *p = (int *)calloc(3,sizeof(int))
  2. malloc和calloc的区别:malloc分配完内存后并不会对其进行初始化,所以如果没有填入值将会得到一些随机值;而calloc会对其进行初始化为0

realloc函数

如果有一个动态分配的内存,要想修改内存块的大小就可以用realloc

  1. realloc函数的定义:void* realloc(void* ptr, size_t size)

realloc接收两个参数,第一个是指向已分配内存的起始指针地址,第二个参数是新的内存块的大小

  1. 例:这个函数会请求一块新的大小是2n的内存,然后把之前那个内存的内容拷贝过去

工作原理:如果请求的新块大于之前的块,就可以扩展之前的块,如果能够在之前的块的基础上找到连续的内存,那么扩展之前的块,否则就分配新的内存。把之前的块拷贝过去,然后释放之前的内存

int *B = (int*)realloc(A,2*n*sizeof(int)); 
  1. 若如下:整个A都会被释放掉

int *A = (int*)realloc(A,0); //相当于free(A)
  1. 如果第一个参数是NULL,那么它和调用malloc是一样的效果,这时会创建一个新的内存块,而不会从之前的内存块拷贝任何数据

int *B = (int*)realloc(NULL,n*sizeof(int)); 

 

free函数

函数malloc , calloc ,realloc分配的内存,要使用函数free来释放

  1. 函数free的参数是内存的起始地址

  2. 作用是释放内存

标签:malloc,int,realloc,void,DAY5,内存,size
From: https://www.cnblogs.com/ninnne/p/17586221.html

相关文章

  • Python基础day54 Django2
    配置文件的介绍#注册应用的INSTALLED_APPS=['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.......
  • Python基础day53 Django
    web应用的简介因为Django框架是一个专门用来开发web项目的框架1.web应用程序是什么?web应用程序是一种可以通过web访问的应用程序,也就是说只需要一个浏览器即可,不需要其他软件了2.应用程序与有两种模式Django就是开发的B/S应用程序,所以,我们就认为浏览器就是我们......
  • Python基础day50
    RegExp对象//在JS中使用正则表达式,在js中如何使用正则呢?//定义正则表达式两种方式varreg1=newRegExp("^[a-zA-Z][a-zA-Z0-9]{5,11}");//第一种定义方式varreg2=/^[a-zA-Z][a-zA-Z0-9]{5,11}///第二种定义方式//正则校验数据varres=reg2.test('jason666......
  • week4 day5
    方法也可以抽象 具有抽象方法的类必须是抽象类 抽像的方法必须实现在继承树结构下的第一个具体类必须实现出所有的抽象方法复习一下方法重载:名称相同但是参数不同:1返回类型可以不同2不能只改变返回类型3可以更改存取权限publicintaddnums(inta,intb)puibicdoub......
  • 你省(福建)省队集训 Day5 T1 题解
    简要题意有两个正整数\(a<b\le10^9\),给出\(\dfrac{a}{b}\)的小数点后\(19\)位,要求还原\(a,b\),保证有解。solution一个科技:\(\texttt{Stern-Brocottree}(SBT)\),可以参考这个博客学习。先给出\(O(n)\)找的代码:......
  • day5
    一、[闽盾杯2021]DNS协议分析1.打开流量,过滤dns类型,发现一些类似于base64的编码,并且有规律的出现2.全部提取,ZmxhZ3tlNjYyYWMxNTRjYTM3NmUxYzAwMWVlOGJiZTgxMzE4Yn0K,base64在线解码二、云1.1.1得到一个URL,进去后界面显示一个hint的链接1.2告诉我们整体是一个SpringBoot......
  • 2022 省队二轮集训培训日记-Day5
    模拟赛T1非常简单的构造,但是我忘了判断$m=2$和对只有一个点特判的输出错误,导致挂成$20$。具体思路,考虑欧拉路径只能有两个奇点,但是每条边上中间的都是奇点,所以我们需要删掉边缘的一些边,直到剩下两个奇点,然后对于$n,m$都是偶数,或者一个偶数一个奇数,或者两个都是奇数来分别......
  • 你省(福建)省队集训 Day5 T3 乱搞分析
    简要题意有\(1\leT\le10^6\)次询问,每次询问正整数\(x,p\),\(p\)为素数,令\(n=xp^2\),问是否存在三个正整数\(a,b,c\),满足\(ab+bc+ca=n\)。有的话给出构造,否则输出\(-1\)。solution打表注意到只有\(n=4,18\)是无解的。打表namespaceDB{ constintN=1e5; struc......
  • 算法学习day58单调栈part01-739、496
    packageLeetCode.stackpart01;importjava.util.Deque;importjava.util.LinkedList;/***739.每日温度*给定一个整数数组temperatures,表示每天的温度,返回一个数组answer,其中answer[i]是指对于第i天,下一个更高温度出现在几天后。*如果气温在这之后都不会升高,请......
  • 算法学习day59单调栈part02-503、42
    packageLeetCode.stackpart02;importjava.util.Arrays;importjava.util.Stack;publicclassNextGreaterElementII_503{publicint[]nextGreaterElements(int[]nums){//边界判断if(nums==null||nums.length<=1){return......