C和指针之动态内存分配malloc、calloc、realloc简单使用和区别

1、介绍

3个函数都在<stdlib.h>头文件
1)、void* malloc(unsigned size);
在内存的动态存储区中分配一块长度为size字节的连续区域,参数size为需要内存空间的长度,返回该区域的首地址,这里我们需要主要如果申请失败返回空指针
2)、void* realloc(void* ptr, unsigned newsize);  
给一个已经分配了地址的指针重新分配空间,参数ptr为原有的空间地址,newsize是重新申请的地址长度,地址可能会变
3)、void* calloc(size_t numElements, size_t sizeOfElement); 
参数sizeOfElement为申请地址的单位元素长度,numElements为元素个数,即在内存中申请numElements*sizeOfElement字节大小的连续地址空间
会将所分配的内存空间中的每一位都初始化为零,也就是说,如果你是为字符类型或整数类型的元素分配内存,那么这些元素将保证会被初始化为0
用完要记得释放内存
free(p);
p = NULL;
都在堆区分配内存,用完都需要释放,都是连续的分配内存

2、测试Demo

3个函数简单使用
#include <stdio.h>
#include <stdlib.h>//malloc、realloc、calloc简单使用int main()
{int *p1 = NULL;p1 = malloc(10 * sizeof(int));if (p1 != NULL){//给p1赋值for (int i = 0; i < 10; ++i){*(p1 + i) = 5;}//打印值for (int i = 0; i < 10; ++i){printf("p1[%d] is %d\n", i, p1[i]);}free(p1);p1 = NULL;}int *p2 = NULL;p2 = calloc(5, sizeof(int));if (p2 != NULL){for (int i = 0; i < 5; i++){printf("p2[%d] is %d\n", i, p2[i]);}free(p2);p2 = NULL;}char *p3, *q4;p3 = (char *)malloc(5);q4 = p3;p3 = (char *)realloc(p3, 10)if (p3 != NULL){printf("p3 is %p\n", p3);printf("q3 is %p\n", q4);p3 = (char *)realloc(p3, 1000);printf("p3 is %p\n", p3);free(p3);p3 = NULL;}return 0;
}

 

 

 

3、 运行结果

1111deMacBook-Pro:malloc a1111$ vim malloc.c
1111deMacBook-Pro:malloc a1111$ gcc -g malloc.c -o malloc
1111deMacBook-Pro:malloc a1111$ ./malloc
p1[0] is 5
p1[1] is 5
p1[2] is 5
p1[3] is 5
p1[4] is 5
p1[5] is 5
p1[6] is 5
p1[7] is 5
p1[8] is 5
p1[9] is 5
p2[0] is 0
p2[1] is 0
p2[2] is 0
p2[3] is 0
p2[4] is 0
p3 is 0x7ff323c01020
q3 is 0x7ff323c01020
p3 is 0x7ff323c03260

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290220.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

理解Linux系统中的load average

一、什么是load average&#xff1f;linux系统中的Load对当前CPU工作量的度量 (WikiPedia: the system load is a measure of the amount of work that a computer system is doing)。也有简单的说是进程队列的长度。Load Average 就是一段时间 (1 分钟、5分钟、15分钟) 内平均…

【贯穿】.NET6结合Docker傻瓜式实现容器编排

常规开发部署的痛点一个项目的开发上线有很多纷繁复杂的问题&#xff0c;例如&#xff1a;操作系统运行环境以及各种应用配置、集群环境搭建等等。特别是各种版本的迭代导致的不兼容&#xff0c;这些对于曾经的架构师而言也十分苦恼。而Docker的出现实现了从“蚂蚁搬家”到“乾…

bootstrapt 表格自适应_一起聊B端设计 - 如何设计表格?

一、 数据查看让我们先来回顾一下表格的基本构成&#xff0c;最上面的为表头&#xff0c;横为行&#xff0c;纵为列&#xff0c;内容区每一组展示数据区域为单元格。 表格的设计&#xff0c;虽然看似简单&#xff0c;但是作为用户最常用的组件之一&#xff0c;我们需要对视觉和…

.NET 6 攻略大全(二)

点击上方蓝字关注我们&#xff08;本文阅读时间&#xff1a;15分钟)接上篇内容&#xff0c;本篇文章将介绍&#xff1a;Arm64、容器、支持 OpenTelemetry 指标、Windows Forms 的相关攻略。 Arm64这些天来&#xff0c;对于笔记本电脑、云硬件和其他设备来说&#xff0c;Arm64 令…

C和指针之动态内存分配之输入很多整数进行排序

1、问题 读取一列整数,然后按升序排列它们,最后打印列表 2、代码实现 #include <stdio.h> #include <stdlib.h> /** 此函数根据你给的比较条件进行快速排序,通过指针移动实现排序 void qsort ( void * base, size_t num, size_t size, int ( * comparator ) (…

ubuntu 开启 apache mod_rewrite

2019独角兽企业重金招聘Python工程师标准>>> ci里需要隐藏index.php的输入需要使用apache的rewrite模块,按照下面的步骤开启mod_rewrite http://www.dev-metal.com/enable-mod_rewrite-ubuntu-14-04-lts/ 转载于:https://my.oschina.net/u/1177171/blog/354202

【转】Linux中断处理学习笔记

原文网址&#xff1a;http://www.cnblogs.com/GT_Andy/archive/2011/06/21/2086100.html 1&#xff0e;Linux中断的注册与释放&#xff1a; 在<linux/interrupt.h>, , 实现中断注册接口: int request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct …

Jenkins入门系列之——03PDF文档下载

啥都不说了&#xff0c;网页看着蛋疼的&#xff0c;自己下载pdf文档吧。 点击下载文档 http://files.cnblogs.com/zz0412/jenkins%E5%85%A5%E9%97%A8%E6%89%8B%E5%86%8C.pdf &#xff08;一直有人说下载不了&#xff0c;把连接单独发出来&#xff09; 好记性不如烂笔头&#x…

Android之ndk之用arm-linux-androideabi工具通过地址找到具体哪里崩溃

1、配置环境 1)、找到ndk目录,如果不记得我们到bashrc文件里找到 vim ~/.bashrc 2)、配置ndk目录下的arm-linux-androideabi的bin到bashrc文件里面去 vim ~/.bashrc 然后配置路径,这里是我的 export PATH=$PATH:******/android-ndk-r10e…

composer切换源_Composer具体安装方法

composer 作为依赖管理工具&#xff0c;使用频率还是挺高的。特别是对于我这种比较懒的程序猿&#xff0c;有现成轮子的时候坚决不自己重复造轮子。它主要有三部分构成&#xff1a;命令行工具&#xff0c;包仓库&#xff0c;代码库。包仓库就是我们常说的 composer 源&#xff…

C# 操作FireBird 附源码

写了一个C#操作firebird数据库的小Demo&#xff0c;有需要的可以研究研究, 步骤&#xff1a; 1.创建数据库 2.建数据表&#xff0c;插入数据&#xff0c;并读取、 写的时候碰到N多奇葩问题&#xff0c;记录了一些 解决方案&#xff1a; 程序集-生成-目标平台 改成 x86 源码地址…

UILabel的高度自适应

_content [UILabel new]; _content.text "日落时分&#xff0c;沏上一杯山茶&#xff0c;听一曲意境空远的《禅》&#xff0c;心神随此天籁&#xff0c;沉溺于玄妙的幻境里。仿佛我就是那穿梭于葳蕤山林中的一只飞鸟&#xff0c;时而盘旋穿梭&#xff0c;时而引吭高歌&a…

.NET 6 攻略大全(三)

点击上方蓝字关注我们&#xff08;本文阅读时间&#xff1a;15分钟).NET 6 继续与大家相约周日啦。本篇文章将介绍&#xff1a;单文件应用、IL 修整、System.Text.Json、源代码构建、库AIP的相关攻略。 单文件应用 在 .NET 6中&#xff0c;已为 Windows 和 macOS 启用内存中单文…

从如何优化SQL入手,提高数据仓库的ETL效率

1 引言数据仓库建设中的ETL(Extract, Transform, Load)是数据抽取、转换和装载到模型的过程&#xff0c;整个过程基本是通过控制用SQL语句编写的存储过程和函数的方式来实现对数据的直接操作&#xff0c;SQL语句的效率将直接影响到数据仓库后台的性能。 目前&#xff0c…

C和指针之动态内存分配(读取范围在1和标准输入读取的size之前每个数据出现的次数)

1、问题 读取范围在1和标准输入读取的size之前每个数据出现的次数 2、代码实现 #include <stdio.h> #include <stdlib.h> #include <string.h>//读取范围在1和标准输入读取的size之前每个数据出现的次数 int *count(int size) {if (size <= 0)return NUL…

测试眉形的有哪个软件_这五款自动化软件测试工具,你最喜欢用哪个?

对测试自动化的依赖性增加导致大量自动化软件测试工具的出现&#xff0c;使得很难确定哪些是最好的。为了帮助您完成自动化工作&#xff0c;我们根据自己和他人的经验创建了五大最佳自动化软件测试工具列表。1. SeleniumSelenium可以说是web开发人员和测试人员中最受欢迎的自动…

本科 8年经验,20k的Offer,接还是不接?

伴随着疫情的此起彼伏&#xff0c;今年的金三银四跳槽季比往年要低沉很多&#xff0c;近日一条朋友圈火遍社区&#xff0c;“坐标一线城市&#xff0c;本科毕业&#xff0c;8年经验&#xff0c;15天仅5场面试&#xff0c;最终接了20k的offer&#xff0c;今年真难&#xff01;”…

CAD中批量打印

同事在网上找各种软件来实现CAD图的批量打印&#xff0c;总是问题多多。于是&#xff0c;我想到一个更方便的解决方法&#xff0c;即只要我将一个打印出来&#xff0c;然后就可以用批量处理来实现。 1.在CAD中输入plot命令&#xff08;或快捷键CtrlP&#xff09;&#xff0c;即…

java里面的文件上传与下载

java里面的文件上传与下载 文件的上传与下载主要用到两种方法&#xff1a;1、方法一&#xff1a;commons-fileupload.jar commons-io.jarapache的commons-fileupload实现文件上传&#xff0c;下载 【upload】package com.handson.bbs.servlet; import java.io.File;import java…

Photoshop脚本 使用ExtendScript编写Ps脚本

源自&#xff1a;http://coolketang.com/tutorials/menu1lesson3.php本节课程将演示如何使用ExtendScript编写脚本&#xff0c;它是由Adobe公司开发的一款脚本语言工具包。以后的所有课程也将使用这款工具编写脚本。您可以在开始菜单(Windows电脑)或Application目录(Mac电脑)上…