C语言中malloc(),free(),calloc(),realloc()

news/2024/5/19 15:28:40/文章来源:https://blog.csdn.net/weixin_47681530/article/details/126911092

申请内存malloc()在申请内存时不会对内存进行初始化赋值

在申请内存后,没有对内存进行初始化的话,这段内存中就存储着系统随机值。

int n = 5;
int* p = (int*)malloc(n * sizeof(int));
  1. malloc(size):size就是你想开辟的内存的字节大小。我们通常想要用这段内存存储n个某种类型的数据,所以如果我们想要用这段内存存储n个int大小(四字节大小)的数据(需要n*4字节内存),就使用malloc(n * sizeof(int))或malloc(n * 4)。
  2. (int:int就是你想要分割的单个格子大小*。系统不知道这段内存是单个一段,还是你想将其分为几个单元格。所以我们需要给系统明确我们想要怎么样,如果我们想要用这段内存存储int大小的数据,就用int标记,系统自动识别,将这段内存分隔为4字节大小的连续单元格。还因为这是开辟的内存地址,需要用指针来指向所以用(int*)将其强转为指针
  3. int p*:对应想要存储的数据大小,就要选择对应指针解析存储单元大小相同,指针加整型能力相同的指针类型。malloc()将开辟好的内存起始地址返回回来,用指针进行保存。未成功开辟内存就返回一个空指针。

有两种给内存初始化的方式:
(1)直接for循环给内存中每个单元格赋值。

for (int i = 0; i < n; i++) {p[i] = 1;
}

(2)以string.h头文件中的memset()函数实现内存初始化。

memset(初始化内存(void*),int value,unsigned int size);
//初始化内存:所要初始化的内存地址,也就是指向该内存的指针
//value:想要以什么值进行初始化
//size:想要初始化的内存大小(字节大小)

由于memset()函数是以字节为单位进行内存初始化的,所以memset(p,0,nsizeof(int))可以将所开辟的内存的每个字节初始化为0。
在这里插入图片描述
所以使用memset(p,1,n
sizeof(int))并不是将一个单元格中的数据初始化为1,而是将每个字节初始化为1。

memset(p,1,n*sizeof(int));

在这里插入图片描述

申请内存calloc()在初始化内存时,将分好的各个单元格初始化为对应数据类型的默认值

//类型* 指针名 = (单元格解析大小 *)calloc(单元格数目,单元格大小);
int* p = (int*)calloc(n , sizeof(int));
double* p = (double*)calloc(n , sizeof(double));

申请扩容realloc()

//类型* 指针名 = (解析单元格大小*)realloc(要扩容的内存地址(指针名),扩容内存的目标总字节大小);
int* q = (int*)realloc(p,10*sizeof(int));

示例

//类型* 指针名 = (解析单元格大小*)realloc(要扩容的内存地址(指针名),扩容内存的目标总字节大小);
//原先内存为5*4=20字节,现在扩容到10*4=40字节。
p = (int*)realloc(p, 10*sizeof(int));// 方法(1)  //error
if(p==NULL) exit(1);                
int *q = (int*)realloc(p, 10*sizeof(int));//方法(2) //right
if(q==NULL) exit(1);               

释放内存free()

//free(指向要释放的内存的起始地址地指针);
int n = 5;
int* p = (int*)malloc(n *sizeof(int));
free(p);//p存放的就是所开辟内存的起始地址
p = NULL;

本文借鉴于

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

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

相关文章

SpringCloud基础6——分布式事务,Seata

用于复习快速回顾。 目录 1.分布式事务问题 1.1.本地事务&#xff0c;ACID原则 1.2.分布式事务 1.3.演示分布式事务问题 2.理论基础 2.1.CAP定理 2.1.1.一致性&#xff0c;数据同步 2.1.2.可用性&#xff0c;节点正常访问 2.1.3.分区容错 2.1.4.矛盾 2.2.BASE理论 …

vulnhub-xxe lab: 1

ifconfig nmap 192.168.61.0/24 找到192.168.61.145 目录扫描&#xff08;御剑&#xff09; 192.168.61.145/xxe 192.168.61.145/admin.php 无法访问&#xff0c;但是robots.txt里面写的应该不会是无效网站&#xff0c;所以可能是被拒绝访问了 抓xxe的包 可以发现是用xml写的…

[ web基础篇 ] Burp Suite 爆破 Basic 认证密码

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

层次选择器

层次选择器 后代选择器简介后代选择器可以选择作为某元素后代的元素(包括儿子,孙子,重孙子) 两个元素之间的层次间隔可以是无限的示例<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><title>Title</t…

怎么把握住股票每天的最佳交易时机?

每个股民都希望自己能够在每天的股价最高点卖出&#xff0c;然后在最低点再买回来&#xff1b;但是怎么去判断最好的交易时机呢&#xff0c;很多人会想很多方法去识别判断最佳交易点&#xff0c;今天给大家分享一种方法&#xff1b;我一直在思考股票交易的底层逻辑是啥&#xf…

如何在基础镜像中安装指定python版本

背景 由于规范要求要使用指定的镜像版本,但是由于该镜像中的python与我使用的版本有差异,怕引起一些不必要的兼容问题,所以我需要自己按基础镜像基础上安装对应版本的python。 Dockerfile 直接上最终dockerfile,为什么这样写,后面说到。 FROM centos:7 # 指定工作目录 WOR…

【2022中国高校计算机大赛 微信大数据挑战赛】Top 1-6 方案总结

前段时间参加了 2022中国高校计算机大赛 微信大数据挑战赛&#xff0c;比赛链接&#xff1a;https://algo.weixin.qq.com/。 由于时间原因精力有限&#xff0c;我们队伍的方案做的比较简陋&#xff1a; 【初赛&#xff1a;rank-18&#xff0c;复赛&#xff1a;rank-40&#xff…

网课查题接口 搜题公众号对接题库教程 (附赠题库接口)

网课查题接口 搜题公众号对接题库教程 &#xff08;附赠题库接口&#xff09; 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查…

bm19bm7

为什么不定义如果两点相等呢 等于的话峰值统一取右 以右来比较 波峰就行 不一定是最大的 在这里插入代码片 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可** * param nums…

微信小程序转为App并上架应用市场

先说说背景吧&#xff0c;笔者开发了一款微信工具类小程序&#xff0c;刚开始&#xff0c;小程序的日访问量和用户数都还可以&#xff0c;但后面慢慢的发现&#xff0c;受限于微信小程序平台规则&#xff0c;很难对用户进行更深入的运营&#xff0c;用户流失问题也将逐渐凸显出…

‘std::thread‘ has not been declared

出现这个问题的原因就是 目前MinGW GCC64还不支持std::thread 这是我的gcc版本 PS D:\MyCode> gcc --version gcc.exe (x86_64-win32-seh-rev0, Built by MinGW-W64 project) 8.1.0 Copyright © 2018 Free Software Foundation, Inc. This is free software; see the s…

七、RequestResponse

Request&Response 第一章 Request 1. 目标 了解Request的概念了解Request的组成部分掌握Request获取请求行的信息掌握Request获取请求头的信息掌握Request获取请求参数掌握解决请求参数乱码掌握Request域对象掌握请求转发 2. 内容 2.1 Request概述 2.1.1 Request的概…

Part16:Pandas的分层索引MultiIndex怎么用?【详解】

Pandas的分层索引Multilndex 1为什么要学习分层索引Multilndex? 1、分层索引:在一个轴向上拥有多个索引层级&#xff0c;可以表达更高维度数据的形式; 2、方便的进行数据筛选&#xff0c;如果有序则性能更好; 3、groupby等操作的结果&#xff0c;如果是多KEY&#xff0c;结…

元宇宙产业委常务副主任委员甘华鸣:关于术语“元宇宙”以及相关问题

【央链知播-编者按&#xff1a;元宇宙产业委常务副主任委员甘华鸣就全国科学技术名词审定委员会元宇宙及核心术语概念研讨会提出的一个观点&#xff0c;发表自己的看法&#xff0c;写了《关于术语“元宇宙”以及相关问题》一文&#xff0c;现转发供元宇宙产业和学术界思考】 以…

老鼠出迷宫

老鼠出迷宫 现有一个图形如下&#xff1a; 要求老鼠在左边第一个位置&#xff0c;走到绿色标的出口橙色为边界不能走。 表盘可以看做是一个[8][7]大小的二维数组&#xff0c;可以用1表示边界&#xff0c;0表示可以走 int [][] arrMap new int[8][7];得到一个数组&#xff1…

Python——基础语法(模块、包、文件读写等操作)

一、模块 概述&#xff1a;一个模块就是一个扩展名为.py的文件&#xff0c;可以包含多个函数、类、语句&#xff1b;使用模块可以提高代码的可维护性、可重用性&#xff0c;避免函数名和变量名冲突&#xff0c;方便其他程序和脚本的导入和使用。 二、模块的自定义 创建一个新…

基于ssm的社区医院儿童预防接种管理系统设计与实现-计算机毕业设计源码+LW文档

开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&…

且看五年开发码农,如何备战仨月硬刚字节面试官,轻松拿offer

写在前面 前不久跟几个哥们儿在一起吃喝玩闹&#xff0c;因为都是程序员出身&#xff0c;多少还是会谈谈各自公司的状况&#xff0c;其中一位朋友就是面临着跳槽换工作的情况。虽然做了好几年开发&#xff0c;但还是有很大压力&#xff0c;不光因为此次是想进字节跳动&#xf…

变更控制委员会CCB

在实施整体变更控制过程中&#xff0c;每项记录在案的变更请求都必须由一位责任人批准或否决&#xff0c;这个责任人通常是项目发起人或项目经理。应该在项目管理计划或组织流程中指定这位责任人。必要时&#xff0c;应该由变更控制委员会&#xff08;CCB&#xff09;来开展实施…

vue中keep-alive的作用

vue中keep-alive的作用1、什么是keep-alive?2、作用3、使用场景4、基本使用4.1、所有组件都缓存4.2、include&#xff1a;只有包裹的组件名被缓存4.3、exclude&#xff1a;只有包裹的组件名不会被缓存4.4、max&#xff1a;组件最多缓存的数量4.5、结合路由router&#xff0c;缓…