关于malloc,calloc,realloc

news2024/10/1 11:48:15

1.引用的头文件介绍:

这三个函数需要调用<stdlib.h>这个头文件

2.malloc

2.1 函数简单介绍:

首先这个函数是用于动态开辟一个空间,例如数组在c99标准之前是无法arr[N]的,这个时候就需要使用malloc去进行处理,但是这个函数刚开始使用的是不会进行初始化的且这个函数的返回值是一个void型的指针,需要自己手动进行转化,也就是开始开辟的那个空间中的内容都是随机值,如果开辟失败,就会返回一个NULL空指针。(记得要free掉动态开辟的空间哦,还有就是free的时候只是把空间归还了回去,指针并没有变,所以还需要再把它指向NULL)

2.2简单代码运用:

#include <stdio.h>
#include <stdlib.h>
int main() {
    int* p = (int*)malloc(40);

if(p=NULL){

perror("malloc");

}
    int i = 0;
    //for (i = 0; i < 10; i++) {
    //    p[i] = i;
    //}
    for (i = 0; i < 10; i++) {
        printf("%d ", p[i]);
    }

free(p);

p=NULL;

    return 0;

}

2.3代码效果展示

从图中可以看出生成的都是随机值。

3.calloc

3.1函数介绍:

这个函数基本上于malloc函数一致,只不过这个函数会进行初始化。

3.2简单代码使用:

#include <stdio.h>
#include <stdlib.h>
int main() {
    int* p = (int*)calloc(10,sizeof(int));

if(p==NULL){

perror("calloc");

}

    int i = 0;
    //for (i = 0; i < 10; i++) {
    //    p[i] = i;
    //}
    for (i = 0; i < 10; i++) {
        printf("%d ", p[i]);
    }

free(p);

p=NULL;
    return 0;

}

3.3代码效果展示

从图中可以看出是已经进行过初始化的了。

4.realloc

4.1函数介绍:

该函数能在动态开辟原来的空间的基础上进行扩展,在这里要注意,动态开辟的空间是在堆区的,所以不能简单地作用于普通的指针,扩展的规则是,如果一开始直接往后扩,空间还有剩余的话,就会接着往后,如果不够扩展的话,就会重新开辟一块能够符合的空间,然后把之前部分的内容拷贝过去,再把首地址给他,在使用的时候需要注意先给个中间存放地址的,因为要先判断是否生成成功,不然会遗失原来的数据。

4.2简单代码使用

#include <stdio.h>
#include <stdlib.h>
int find_fir(int* p, int num) {
    int* tmp = (int*)realloc(p,num*3*sizeof(int));
    if (tmp == NULL) {
        perror("realloc");
    }
    p = tmp;
    int i = 0;
    memmove(p+num, p , sizeof(int) * num);
    memmove(p+2*num, p, sizeof(int) * num);
    int flag = 0;
    for (i = 0; i < num * 3; i++) {
        flag ^= p[i];
    }
    free(p);
    p = NULL;
    return flag;


}
int main() {
    int* p = (int*)calloc(11,sizeof(int));
    if (p == NULL) {
        perror("malloc");
    }
    int i = 0;
    //for (i = 0; i < 10; i++) {
    //    p[i] = i;
    //}
    for (i = 0; i < 10; i+=2) {
        p[i] = i;
    }
    for (i = 1; i < 10; i+=2) {
        p[i] = i-1;
    }
    p[10] = 11;
    int ret = find_fir(p,11);
    printf("%d", ret);
    
    return 0;

}

简单讲解一下这个代码是在干嘛,其实就是一个在一个动态开辟的空间中存入int型数据,里面存入的数据出现两次或者一次且只有一个出现了一次,要求找到这个只出现了一次的数据。为什么要realloc呢,因为你不知道该空间中存在了哪些数,因为这些数不是按顺序排好的,为什么要realloc三倍的空间呢,因为如果进行2次就会导致一个的那个也变成了偶数次,如果三次的话刚好就可以规避这个问题。

4.3代码效果展示

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

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

相关文章

kettle从入门到精通 第八十八课 ETL之kettle kettle连接sqlserver彻底搞明白

场景&#xff1a;时不时群里面会有小伙伴咨询使用kettle连接ms sqlserver 数据库&#xff0c;折腾很久浪费时间&#xff0c;今天刚好有时间把这一块梳理下&#xff0c;希望能让大家节省时间提高效率。 1、首先要知道连接sqlserver 有两种方式&#xff0c;JTDS jdbc驱动和微软的…

Web安全 - 重放攻击(Replay Attack)

文章目录 OWASP 2023 TOP 10导图1. 概述2. 重放攻击的原理攻击步骤 3. 常见的重放攻击场景4. 防御重放攻击的技术措施4.1 使用时效性验证&#xff08;Time-Based Tokens&#xff09;4.2 单次令牌机制&#xff08;Nonce&#xff09;4.3 TLS/SSL 协议4.4 HMAC&#xff08;哈希消息…

4.1、FineReport单元格扩展和父子格

单元格扩展 1、配置数据集 2、纵向扩展 方法一&#xff1a; 方法二&#xff1a; 结果 多个字段纵向 2、横向扩展 方法一&#xff1a; 方法二&#xff1a; 结果 父子格 没什么特殊要求&#xff0c;就保持默认 1、右边的值默认以左边为左父格 2、下边的值默认以上边…

Node.JS 版本管理工具 Fnm 安装及配置(Windows)

Fnm 安装及配置&#xff08;Windows&#xff09; Fnm&#xff08;Fast Node Manager&#xff09;&#x1f680; 一个快速而简单的 Node.js 版本管理工具&#xff0c;使用 Rust 编写。 1 安装 官网&#xff1a;Fnm&#xff08;镜像网站 &#xff09;。下载&#xff1a;Fnm&a…

高德POI数据下载详细说明

本文详细总结了如何利用地图资源下载工具&#xff08;geodatatool&#xff09;下载高德POI数据。下载POI数据相对比较复杂。加上地图资源下载工具&#xff08;geodatatool&#xff09;下载功能越来越多、越复杂&#xff01;很多时候我给网友介绍的时候也会出现纰漏&#xff01;…

第4篇:如何在百万行代码里发现隐藏的后门----应急响应篇

试想一下&#xff0c;如果你的网站被入侵&#xff0c;攻击者留下隐藏的后门&#xff0c;你真的都可以找出来嘛&#xff1f;面对一个大中型的应用系统&#xff0c;数以百万级的代码行&#xff0c;是不可能做到每个文件每段代码进行手工检查的。 即使是一款拥有99.9%的Webshell检…

鸿蒙NEXT开发-组件事件监听和状态管理(基于最新api12稳定版)

注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注&#xff0c;博主会一直更新鸿蒙next相关知识 专栏地址: https://blog.csdn.net/qq_56760790/…

SpringBoot + ITextPdf:高效生成 PDF 预览文件

问过神奇的chatgpt后&#xff0c;了解到iTextPdf这个库&#xff0c;应该是比较好的选择。 解决方案 我们先观察下真实的开票预览的模板。 发票信息由两部分组成&#xff1a; 固定信息&#xff0c;例如购买方信息、销售方信息。 商品信息&#xff0c;可能有多行&#xff0c;需…

基于yolov8的100种中草药智能识别系统python源码+pt模型+训练日志+精美GUI界面

【算法介绍】 基于YOLOv8的100种中草药智能识别系统是一款利用最新的YOLOv8算法开发的高效、准确的识别工具。该系统能够精准快速地识别100种不同的中草药类别&#xff0c;对于传统中药行业是一次重要的革新。 该系统通过搜集不同中草药的相关数据图片&#xff0c;并基于YOLO…

【leetcode】122. 买卖股票的最佳时机 II

题目描述 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买&#xff0c;然后在 同一天 出售。 返回 你能获得的 最大 利润 。…

nacos client 本地缓存问题

问题&#xff1a; nacos 更新了配置文件&#xff0c;更新了以后重新启动还是旧的配置信息。 NACOS版本&#xff1a; 1.1.4 解决&#xff1a; 配置缓存 Nacos Client 会将从 Nacos 服务器获取的配置信息缓存在本地。这样&#xff0c;即使 Nacos 服务器不可用&#xff0c;客…

成都大学体育场馆预约系统—计算机毕业设计源码37087

摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存…

AMD CDNA™2 GPU 中的寄存器压力

Register pressure in AMD CDNA™2 GPUs — ROCm Blogs 注意&#xff1a; 此博客以前是 AMD实验室笔记 博客系列的一部分。 GPU kernel 中的寄存器压力对高性能计算 (HPC) 应用程序的整体性能有着巨大的影响。理解和控制寄存器的使用可以让开发者精心设计代码&#xff0c;以最…

解决银河麒麟中`/etc/sudoers`权限问题

解决银河麒麟中/etc/sudoers权限问题 1、问题描述2、解决方法 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 当你在银河麒麟操作系统中使用sudo命令时&#xff0c;如果遇到“/etc/sudoers可被任何人写”的错误&#xff0c;说明/etc/sudoer…

国庆节快乐

葡萄城在这里祝大家国庆快快乐&#xff1a; 10月葡萄城活动&#xff1a; 公开课 【从软件应用走向数据应用——葡萄城技术赋能数据挖掘】 新版本发布&#xff1a; 活字格 V10.0 Update1新版本发布

Linux相关概念和重要知识点(8)(操作系统、进程属性)

1.操作系统&#xff08;OS&#xff09; &#xff08;1&#xff09;基本结构的认识 任何计算机系统都包含一个基本的程序集合&#xff0c;用于实现计算机最基本最底层的操作&#xff0c;这个软件称为操作系统。操作系统大部分使用C语言编写&#xff0c;少量使用汇编语言。 从…

【数学分析笔记】第4章第2节 导数的意义和性质(1)

4. 微分 4.2 导数的意义与性质 4.2.1 导数在物理中的背景 物体在OS方向上运动&#xff0c;位移函数为 s s ( t ) ss(t) ss(t)&#xff0c;求时刻 t t t的瞬时速度&#xff0c;找一个区间 [ t , t △ t ] [t,t\bigtriangleup t] [t,t△t]&#xff0c;从时刻 t t t变到时刻 t…

闭源与开源嵌入模型比较以及提升语义搜索效果的技术探讨

上图为执行语义搜索前的聚类演示 &#xff0c;嵌入技术是自然语言处理的核心组成部分。虽然嵌入技术的应用范围广泛&#xff0c;但在检索应用中的语义搜索仍是其最常见的用途之一。 尽管知识图谱等可以提升检索的准确率和效率&#xff0c;但标准向量检索技术仍然具有其实用价值…

基于SSM的农产品仓库管理系统【附源码】

基于SSM的农产品仓库管理系统&#xff08;源码L文说明文档&#xff09; 目录 4 系统设计 4.1 系统概要设计 4.2 系统功能结构设计 4.3 数据库设计 4.3.1 数据库E-R图设计 4.3.2 数据库表结构设计 5 系统实现 5.1 管理员功能介绍 5.1.1 用户管…

CSS外边距

元素的外边距&#xff08;margin&#xff09;是围绕在元素边框以外&#xff08;不包括边框&#xff09;的空白区域&#xff0c;这片区域不受 background 属性的影响&#xff0c;始终是透明的。 为元素设置外边距 默认情况下如果不设置外边距属性&#xff0c;HTML 元素就是不会…