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


猜你喜欢
- 下面对Java反射的基础知识进行说明和总结:首先定义一个MyBase类,其中有私有字段,也有公有字段。同时也有公有方法和私有方法。MyBas
- package com.test;import org.htmlparser.Node;import org.htmlparser.Node
- 实现方案:我们直接参考实例代码:private String pattern = "((http|ftp
- 前言:java5为我们提供了Callable和Future,使我们可以很容易的完成异步任务结果的获取,但是通过Future的get获取异步任
- 写在前面在平时的开发之中,我们需要对于数据加载的情况进行展示:空数据网络异常加载中等等情况现在设置页面状态的方式有多种,由于笔者近期一直在使
- 本文实例为大家分享了unity实现虚拟摇杆控的具体代码,供大家参考,具体内容如下using UnityEngine;using UnityE
- 一、面向对象的描述面向对象是一种现在最为流行的程序设计方法,几乎现在的所有应用都以面向对象为主了,最早的面向对象的概念实际上是由IBM提出的
- 简介TreeMap使用红黑树存储元素,可以保证元素按key值的大小进行遍历。继承体系TreeMap实现了Map、SortedMap、Navi
- 电商项目中经常有这样的需求:在商品列表页面中,切换列表的展现形式,一般分为列表形式和表格形式。如京东:本文最终实现的效果:关键词:Recyc
- FileOutPutStream:子类,写出数据的通道步骤:1.获取目标文件2.创建通道(如果原来没有目标文件,则会自动创建一个)3.写入数
- 实现原理在之前的文章中,我们介绍了普通的帐号密码登录的方式: SpringBoot + Spring Security 基本使用及个性化登录
- 本文实例讲述了C#实现String类型和json之间的相互转换功能。分享给大家供大家参考,具体如下:////Donet2.0 需要添加引用/
- 什么是JDBCJDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java AP
- 举个例子Map < String , Object > jsonMap = new HashMap< String , O
- 最近学习了继承,多态,集合,设计模式,有一个汽车租凭系统,给大家分享一下:我们首先来看看我们这个系统的效果1.做一个项目,我们首先对项目进行
- 本文实例为大家分享了WinForm实现鼠标拖动控件跟随效果的具体代码,供大家参考,具体内容如下1. 运行初始窗口如下:2. 拖动后效果如下:
- LinearLayout<?xml version="1.0" encoding="utf-8"
- 在项目中经常会遇到对按钮、自定义控件的 Item 等防止多次重复的点击的问题,下面做一个小结。方法1:使用 RxJava 的 throttl
- 上一章说明了DataBinding生存的类之间关系,现在这里来看看布局是如何加载的以及view是如何映射的。一、布局加载这里把之前的代码重新
- Canvas,在英语中,这个单词的意思是帆布。在Android中,则把Canvas当做画布,只要我们借助设置好的画笔(Paint类)就可以在