C语言 子函数调malloc申请内存返回给主函数使用——可行,但要注意
一般情况,子函数中动态申请内存,将地址返回给主函数,理论上应该也是可以的,需要子函数返回动态内存地址,主函数实参是相应的地址变量即可。只不过,主函数实参传入子函数之前,可能会将指针置空,那么,子函数就不能动态申请内存了。
如下例子:
C语言进阶---动态内存管理_c语言怎么遍历动态申请里面的内容-CSDN博客
4.几个经典的面试题
4.1 题目1:
void Getmemory(char* p)//形参是实参的一份临时拷贝 p是指针变量 p指向NULL *p是NULL
{p = (char*)malloc(100);//p由指向NULL 变为指向malloc开辟空间的起始地址
}
void Test(void)
{char* str = NULL;GetMemory(str);//传的是实参strcpy(str, "helllo world");printf(str);
}
//程序会崩溃无法打印
更正:通过传实参的地址来找到实参在内存当中的位置然后再改变实参的值:
void GetMemory(char** p)//char**p接收str的地址,是一个二级指针
{*p = (char*)malloc(100);//*p==str 由指向NULL 变为指向malloc开辟空间的起始地址
}
void Test(void)
{char* str = NULL;GetMemory(&str);//转str的地址strcpy(str, "helllo world");printf(str);free(str);str = NULL;
}
int main()
{Test();return 0;
}
//程序会正常打印"hello world"
另一个传地址的例子:
4.2题目2:
返回栈空间问题:
char* GetMemory(void)
{char p [] = "hello world";//栈空间开辟数组return p;//p放在寄存器当中,这个函数可以成功返回数组名p,也就是数组的首元素地址}
void Test(void)
{char* str = NULL;str = GetMemory();printf(str);
}
int main()
{Test();return 0;
}
//栈空间在用完之后会被系统回收,因此创建的数组p在GetMemory调用完之后就已经被销毁无法使用了
//str属于是野指针去访问了一块被销毁的空间,因此会打印一些随机值
改为:
int* test()
{int a = 10;return &a;//a的地址被存放在寄存器当中
}
int main()
{int* p = test();//p接收到a的地址printf("%d\n", *p);//p已经是野指针 打印10 因为调用test的栈空间还没有被覆盖printf("%d\n", *p);// 打印随机值 有一次调用test函数,栈空间被新随机值给覆盖return 0;
}
另外,上面所说子函数动态申请内存给主函数用,主函数在使用完要释放。释放后最好置空,否则,其是个野指针,可能会导致错误。
4.3题目3:
void GetMemory(char** p, int num)
{assert(*p);*p = (char*)malloc(num);
}
void tset(void)
{char* str = NULL;GetMemory(&str, 100);strcpy(str, "hello");printf(str);//free释放free(str);str = NULL;
}
int main()
{test();return 0;
}
改正:
void test(void)
{char* str = (char*)malloc(100);strcpy(str, "hello");free(str);//free释放str = NULL;//置空if (str != NULL){strcpy(str, "world");printf(str);//无法打印}
}
int main()
{test();return 0;
}
相关文章:
C语言 子函数调malloc申请内存返回给主函数使用——可行,但要注意
一般情况,子函数中动态申请内存,将地址返回给主函数,理论上应该也是可以的,需要子函数返回动态内存地址,主函数实参是相应的地址变量即可。只不过,主函数实参传入子函数之前,可能会将指针置空&a…...
Python入门教程之条件语句与运算符优先级详解
文章目录 Python 条件语句Python运算符优先级关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 Python 条件语句 …...
高通Camera HAL3: CamX、Chi-CDK要点
目录 一、概述 二、目录 三、CamX组件之前的关系 一、概述 高通CamX架构是高通实现的相机HAL3架构,被各OEM厂商广泛采用。 二、目录 代码位于vendor/qcom/proprietary下: camx:通用功能性接口的代码实现集合chi-cdk:可定制化…...
springboot+vue热带野生动物园景点预约门票订票系统
热带野生动物园景点预约订票系统为野生动物园提供景点管理服务的系统,通过登录系统,管理该野生动物园所有的景点信息、景点分类信息、野生动物园新闻、通知公告、回复会员留言等,并可以通过订单管理查看会员预定的订单信息,对订单…...
Flutter和Android的混合跳转
1、项目特点 项目是Flutter作为主工程,将Android module或SDK作为模块嵌入到flutter中,与通常所熟悉的Android(或iOS)工程将flutter 为module嵌入到工程中有所不同。 2、业务需求 任意界面间的跳转,不管是flutter页…...
CyberRT-共享内存实现
CyberRT共享内存类图 共享内存消息发布 数据用共享内存发布时,首先会创建ShmTransmitter对象,包含两个主要成员segment和notifier,Segment用于创建共享内存(上面绿色部分),Notifer 最终构建ReadableInfo通…...
linux通过串口传输文件
简介 在嵌入式调试过程中,我们经常会使用调试串口来查看Log或者执行指令,其实,调试串口还有另一种功能,就是传输文件,本文说明使用MobaXterm串口工具来传输文件。 环境要求 嵌入式系统需要安装lsz和lrz,…...
uniapp 打包后各静态资源加载失败的问题(背景图,字体等)
原因: 1.部署地址不在域名根目录下 解决办法(推荐办法2): 办法1.如果部署在域名的文件夹下(例如h5), 则运行的基础路径修改为/h5/ 且注意路由模式 办法2.不修改运行的基础路径(还是./), 将代码中涉及背景图(background-image)和字体资源的路径前统一加,如图: tips: 标签内s…...
关于git hooks
Git hooks 是一种在 Git 仓库中触发自定义脚本的机制。这些脚本可以在特定的 Git 操作(如提交、推送、合并等)发生时执行。通过使用 Git hooks,你可以在版本控制的不同阶段自动运行脚本,以执行一些定制化的操作。 在 Git 中&…...
mongodb数据库的常用操作语句
说在前面的话 本文所有的操作示例,都以集合“HistoryTaskBase”为例。 一、查询 1、时间区间 查询“通知时间”介于2019-09-01到2019-10-01之间的数据。 db.getCollection(HistoryTaskBase).find({notifyTime:{$gte:ISODate(2019-09-01T00:00:00.000Z),$lte:ISOD…...
ubuntu安装完qt后发现找不到图标
layout: post # 使用的布局(不需要改) title: Qt启动问题 # 标题 subtitle: ubuntu安装完Qt #副标题 date: 2023-11-18 # 时间 author: BY ThreeStones1029 # 作者 header-img: img/about_bg.jpg #这篇文章标题背景图片 catalog: true # 是否归档 tags: …...
bazel远程构建(Remote Execution) -- Buildfarm部署中的问题
问题1:server报logOverdueOperation和WARNING: removed dispatched operation shard/operations/, worker报WARNING: missing queued operation: shard/operations/等问题,详情如下: Server Log INFO: DispatchedMonitor: Testin…...
论文阅读:MedSegDiff: Medical Image Segmentation with Diffusion Probabilistic Model
论文标题: MedSegDiff: Medical Image Segmentation with Diffusion Probabilistic Model 翻译: MedSegDiff:基于扩散概率模型的医学图像分割 名词解释: 高频分量(高频信号)对应着图像变化剧烈的部分&…...
openssl加解密-干货分享
0.需要包含的头文件和预定义常量 #include <openssl/rand.h>#include <fstream>#include <openssl/aes.h>#include <openssl/rand.h>// 加密密钥和初始化向量(IV)长度#define AES_KEY_LENGTH 32#define AES_IV_LENGTH 16 1.密…...
【考研数据结构代码题7】求一元多项式之和
题目:编写一个算法,求一元多项式之和 考纲:一元多项式的表示与相加 题型:代码填空或算法设计 难度:★★★ 参考代码 typedef struct node{float coef;//系数int exp;//次数struct node *next; }polynode; polynode *…...
python避坑指南(更新中)
os.path.join 避免连续的/,看示例即清楚,最好的避免方法是字符串首末都不要加’/: join用法 用join前面的符号将参数数组里面的字符串连接起来,注意join只有一个参数...
可以远程控制电脑桌面的软件有哪些?
随着电脑办公的普及,人们对于远程控制电脑的需求也越来越大。远程控制电脑技术能够让用户在不同地点的电脑之间进行操作和访问,能够提高工作效率。可以远程控制电脑桌面的软件有哪些? 1. 远程监控电脑软件 需要安装在被控制端电脑ÿ…...
洛谷 P1250 种树
种树 题目背景 一条街的一边有几座房子,因为环保原因居民想要在路边种些树。 题目描述 路边的地区被分割成块,并被编号成 1 , 2 , … , n 1, 2, \ldots,n 1,2,…,n。每个部分为一个单位尺寸大小并最多可种一棵树。 每个居民都想在门前种些树&#…...
java大视频在线预览(支持断点下载)
1.说明 大视频的在线预览,如果不支持断点下载,将无法在苹果手机上播放,同时不支持进度条拖动. 之所以这样,是因为视频文件太大了,通过二进制流向浏览器传输时,整个文件尚未传输完成时,会被浏览器强制关闭流,不再接收,等缓存播放到一定程度时,浏览器会再次向后端请求视频文件,同…...
OpenCV入门10——特征点检测与匹配
文章目录 特征检测的基本概念Harris角点检测Shi-Tomasi角点检测SIFT关键点检测SIFT计算描述子SURF特征检测OBR特征检测暴力特征匹配FLANN特征匹配实战flann特征匹配图像查找图像拼接基础知识图像拼接实战 特征点检测与匹配是计算机视觉中非常重要的内容。不是所有图像操作都是对…...
手把手教你学 Simulink——基于 Simulink 的 智能四驱扭矩分配与能效优化
目录 手把手教你学 Simulink 一、引言:从“整体驱动”到“分布式驱动”——为什么需要智能扭矩分配? 二、被控对象:车辆动力学模型 A. 三自由度自行车模型(Simulink 实现) 三、控制架构:分层式设计 四、Step 1:上层控制器设计 A. 纵向控制器(PID) B. 横摆控制器…...
Sub-Agent VS Agent Team:多智能体架构和上下文边界
最近被问最多的一个问题,是关于多智能体怎么搭。问题大同小异:要不要拆?拆几个?谁主谁副?要不要再来一个 lead?我自己听到这种问题,第一反应通常是先不答。因为大多数情况下,问的人已…...
实战指南:高效掌握Azure Kinect Sensor SDK的5个核心技巧
实战指南:高效掌握Azure Kinect Sensor SDK的5个核心技巧 【免费下载链接】Azure-Kinect-Sensor-SDK A cross platform (Linux and Windows) user mode SDK to read data from your Azure Kinect device. 项目地址: https://gitcode.com/gh_mirrors/az/Azure-Kine…...
香蕉派BPI-PicoW-S3开发板:ESP32-S3的高性价比实战解析
1. 香蕉派BPI-PicoW-S3开发板深度解析作为一名长期混迹开源硬件圈的嵌入式开发者,当我第一次看到香蕉派BPI-PicoW-S3的参数表时,手里的咖啡差点洒在键盘上——这可能是目前性价比最高的ESP32-S3开发板了。5.5美元的价格标签下,藏着双核240MHz…...
3分钟解锁Steam创意工坊宝藏:WorkshopDL免费下载器终极指南
3分钟解锁Steam创意工坊宝藏:WorkshopDL免费下载器终极指南 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在Epic Games或GOG平台购买了游戏,却发…...
Windows 11系统瘦身终极指南:用免费工具Win11Debloat提升51%性能
Windows 11系统瘦身终极指南:用免费工具Win11Debloat提升51%性能 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declut…...
如何免费获取IBM Plex企业级字体:完整指南与实用技巧
如何免费获取IBM Plex企业级字体:完整指南与实用技巧 【免费下载链接】plex The package of IBM’s typeface, IBM Plex. 项目地址: https://gitcode.com/gh_mirrors/pl/plex 在当今数字化时代,字体选择直接影响产品的专业形象和用户体验。IBM Pl…...
一文了解工业相机的分类及适用场景
工业相机是机器视觉系统中的一个关键组件,其最本质的功能就是将光信号转变成有序的电信号。其成像原理与小孔成像类似,但更为复杂。当被摄物体反射的光线通过工业镜头折射后,会投射到相机的感光传感器上,这个感光传感器通常是电荷…...
3个颠覆性技巧:让macOS视频预览效率提升300%的QLVideo完全指南
3个颠覆性技巧:让macOS视频预览效率提升300%的QLVideo完全指南 【免费下载链接】QuickLookVideo This package allows macOS Finder to display thumbnails, static QuickLook previews, cover art and metadata for most types of video files. 项目地址: https:…...
ThinkPad风扇控制神器:TPFanCtrl2让你的笔记本告别“直升机模式“[特殊字符]
ThinkPad风扇控制神器:TPFanCtrl2让你的笔记本告别"直升机模式"🚀 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 你是否曾经被Think…...
