C语言经典指针笔试题详解
作者:小轩在不在哟 发布时间:2021-10-23 12:56:39
题目一(有关传值调用与非法访问)
请问运行Test 函数会有什么样的结果?
答 :
程序运行会崩溃 ! 且存在内存泄漏 ;
原因:
1.str传给p的时候,是值传递,p是str的临时拷贝,所以当malloc开辟的空间起始地址放在p中的时候,不会影响str,str依然为空指针NULL ;
2.当str是NULL,strcpy想把 hello world 拷贝到str指向的空间时,程序就崩溃了。因为NULL指向的空间是不能直接访问的,造成了非法访问;
3.malloc开辟的空间没有free释放也没有制空,程序不结束就会一直存在,造成了内存泄漏;
正确改正方式为:
题目二 (返回栈空间地址的问题 )
请问运行Test 函数会有什么样的结果?
此类问题是 : 返回栈空间地址的问题
答 :
程序运行打印的是随机值 ;
原因 :
GetMemory函数返回的p是数组名,也就是数组首元素h的地址 ;
但是 ! GetMemory函数创建是在栈空间上创建的,return后会销毁,空间还给操作系统,虽然下面Test函数中的str存了h的地址,但是如果进行打印,原来的空间已经被销毁,打印的内容自然不是想要的内容;(虽然有可能依然打印出 hello world ,那是因为空间暂时还没被覆盖使用,本质上依然是错误的)。
题目三 (区别传值调用的传址调用)
请问运行Test 函数会有什么样的结果?
答 :
虽然能成功打印出 hello world ,但是造成了内存泄漏 , 要记得 free 释放和制空 ;
原因 :
这里传的是str的地址,区别题目1的传值调用,这里是传址调用,形参的改变能影响实参;
malloc开辟的空间地址交给了str ,str指向了这块空间,所以strcpy能成功使用这块空间实现打印内容;
但是没有释放malloc动态开辟的这块空间,也没有制空,造成了内存泄漏 ;
题目四 (free释放的时机)
请问运行Test 函数会有什么样的结果?
这道题比较简单 ,解析给在了代码注释中 ,大家注意查看 。
🎇结尾:
有关这四道经典的指针笔试题讲解就到此结束了,如果觉得文章对自己有所帮助,欢迎大家多多点赞收藏✨ ~
来源:https://blog.csdn.net/xqs196301/article/details/120628107
猜你喜欢
- 一、OutputStreamWriter流 API说明:OutputStreamWriter是从字符流到
- 在实际应用中,我们往往有需要比较两个自定义对象大小的地方。而这些自定义对象的比较,就不像简单的整型数据那么简单,它们往往包含有许多的属性,我
- 实践过程效果代码/** * https://zhima.blog.csdn.net/ */public partial class Form
- 谷歌官方提供了apktool可以逆向已经发布出去的APK应用,即反编译已经打包成功的APK文件,使用它可以将其反编译成非常接近打包前的原始格
- 一、主从复制RocketMQ为了提高消费的高可用性,避免Broker发生单点故障引起Broker上的消息无法及时消费,同时避免单个机器上硬盘
- 在使用EL时,其实EL是先看标识符是否是其隐式对象之一,如果不是,才从四个域(page、request、session、applicatio
- 本文实例为大家分享了Java实现发送邮件并携带附件的具体代码,供大家参考,具体内容如下一、 邮件服务器与传输协议要在网络上实现邮件功能,必须
- 将JavaDoc 注释 生成API文档1. 打开java代码,编写JavaDoc 注释,只有按照java的规范编写注释,才能很好的生成API
- 0x00 关于AndroidManifest.xmlAndroidManifest.xml 是每个android程序中必须的文件。它位于整个
- 之前学习了设计模式原型模式,在原型模式中就提到了对象的深拷贝。深拷贝指的是拷贝一个对象时,不仅仅把对象的引用进行复制,还把该对象引用的值也一
- 1、分布式锁简介分布式锁是控制分布式系统不同进程共同访问共享资源的一种锁的实现。如果不同的系统或同一个系统的不同主机之间共享了某个临界资源,
- 介绍: 本文章主要针对web项目中的两个问题进行详细解析介绍:1- 页面跳转404,即controller转发无法跳转页面问题;2- 静态资
- 第一次进入应用的时候,都会有一个引导页面,引导页面的实现起来也很简单,实现的方式也有很多,下面是自己写的一个引导页面的效果,大致的实现思路为
- 这周末体验了一下挺火的Docker技术,记录学习笔记。>Docker是干什么的Docker 是一个基于Linux容器(LXC-linu
- 在上一篇《Android仿微信滑动弹出编辑、删除菜单效果、增加下拉刷新功能》里,已经带着大家学习如何使用SwipeMenuListView这
- 环境操作系统windows10JDKjdk1.8.0_192IDEEclipse IDE for Enterprise Java Devel
- 近期在开发中遇到一种需求:根据用户的权限决定是否显示某操作按钮。例如:若用户拥有删除数据的权限,则在界面中显示“删除”按钮;若用户无该权限,
- 一.工程文件二.Main.java主函数,实现类package ui;//主函数实现public class Main { &
- 应用场景:在Android开发过程中,有时需要调用手机自身设备的功能,本文侧重摄像头拍照功能的调用。知识点介绍:使用权限:调用手机自身设备功
- 在学习java中的collection时注意到,collection层次的根接口Collection实现了Iterable<T>