12-指针和动态内存-malloc calloc realloc free

devtools/2024/12/21 22:56:57/

一、视频笔记:

Malloc- void* malloc(size - size)

是一个通用的函数,库函数。所做的事情仅仅是,从上找到空闲的内存。为你预留的空间然后通过指针返回给你。

Void *p = malloc(10*sizeof(int))

总共需要的字节数是:单元数量*每个单元的字节数。

指针类型转换:写成int *p 而不是 void *p

Calloc - void *Calloc(size_t num , size_t size)

也是返回一个void指针。接收两个参数,1:特定类型的元素的个数 2:类型的大小

Int *p = (int*)calloc(3 , sizeof(int)) 1:数量 2:类型的大小

Realloc - void* realloc(void* ptr, size_t size)

扩展。接收两个参数:1:指向已分配内存的起始地址的指针 2:新的内存块的大小

当我们想要的内存块可能比想要的要大,开新的,旧的有有剩余且有连续的内存,会拓展之前的块。拷贝释放。

Free - free(A); 入参是内存的起始地址。

任何分配了的动态内存在程序结束之前会一直占据着内存,除非显示的释放它。

传入恰当的参数,realoc 可以作为free或malloc的替代品。

MallocCalloc两者区别:

Malloc:分配完内存后不会对其进行初始化,因此如果你没有得到值,你将会得到一些随机值(垃圾)。

Calloc:会对其初始化为0。

[]里面的值不能是一个变量,会大致编译错误。要先知道数组的大小:

Int *A =malloc((int*)n*sizeof(int));

这里要有int类型的强制转换,否则会编译错误。

Int *B = (int*)realloc(A,0);相当于free(A)

二、代码示例:

我用vs运行有错误,下面写下就示例看下

int main()
{int n;printf("Enter size of array\n");scanf_s("%d", &n);int* A = (int*)calloc(n, sizeof(int));for (int i = 0; i < n; i++){A[i] = i + 1;}//free(A);//free空了之后还是可以修改A[2]地址的值。但是不是在所有机器上都行。//还是请确保只是用分配的内存,否则会像在黑暗中射击,不知道会发生什么//A[2] = 6;int* B = (int*)realloc(NULL, n * sizeof(int)); //可以用realloc代替freeprintf("Prev block address = %d, new address = %d\n", A, B);for (int i = 0; i < n; i++){printf("%d ", A[i]);}
}


http://www.ppmy.cn/devtools/121121.html

相关文章

【C++】单例模式

【C】单例模式 文章目录 【C】单例模式前言一、静态成员变量二、静态函数三、单例模式案例 —— 打印机案例总结 前言 本篇文章将讲到&#xff0c;静态成员变量&#xff0c;静态函数&#xff0c;以及单例模式案例。 一、静态成员变量 静态成员变量 静态成员变量 &#xff1a;编…

拿下奇怪的前端报错:SyntaxError: Unexpected token ‘??=‘或‘xxx‘ - 浅谈Nodejs版本过高过低的部分问题

在前端开发时&#xff0c;如果同时维护多个项目&#xff0c;跨越的年度又比较大&#xff0c;难免会使用多个Nodejs版本。有时候版本不对&#xff0c;不仅仅是安装会报错 1 依赖无法安装 一般情况下nodejs又向后兼容较好&#xff08;除了部分三方包&#xff09;&#xff0c;所…

Keepalived+MySQL 高可用集群

基础架构如下 准备干净的实验环境 [rootmysql1 ~]# systemctl stop firewalld [rootmysql1 ~]# cat /etc/sysconfig/selinux |grep "SELINUXdisabled" SELINUXdisabled [rootmysql1 ~]# setenforce 0 setenforce: SELinux is disabled [rootmysql1 ~…

基于PyQt5和SQLite的数据库操作程序

基于PyQt5和SQLite的数据库操作程序:功能解析 在现代办公和数据处理中,数据库操作是不可或缺的一部分。然而,传统的数据库管理工具往往界面复杂,操作繁琐,对于非专业人士来说存在一定的学习曲线。为了解决这个问题,我们开发了一款基于PyQt5和SQLite的数据库操作程序。该…

Cilium + ebpf 系列文章- (六)Cilium-BGP与分发-EXTERNAL-IP

一、首先你安装的Cilium需要支持BGP cilium install \--version v1.16.1 \--set ipam.modekubernetes \--set routingModenative \--set ipv4NativeRoutingCIDR"10.0.0.0/8" \--set bgpControlPlane.enabledtrue \--set k8s.requireIPv4PodCIDRtrue 这个命令用于安…

二值图像的面积求取的两种方法及MATLAB实现

一、引言 面积在数字图像处理中经常用到&#xff0c;在MATLAB中&#xff0c;计算二值图像的面积通常可以通过两种主要方法实现&#xff1a;遍历法和直接利用bwarea函数。下面将分别介绍这两种方法的原理和相应的MATLAB代码示例。 二、遍历法计算二值图像面积的原理和MATLAB代码…

【C++】类与对象基础概念解析

恭喜你学习完C语言与数据结构的有关内容&#xff0c;现在让我们开始进行对C的学习吧~ &#x1f49d;&#x1f49d;&#x1f49d;如果你对C语言或数据结构还存在疑惑&#xff0c;欢迎观看我之前的作品 &#x1f449;【数据结构】 &#x1f449;【C语言】 目录 一、引言 二、类…

Logistic Regression 使用不同library系数不一样?Sklearn vs. Statsmodel

Logistic Regression 使用不同library系数不一样&#xff1f;Sklearn vs. Statsmodel I realize that for logistic regression, it has different coefficients generated by Sklearn LogisticRegression() and Statsmodel. Why there’s the difference? Why there’s no …