• Day9:面试必考选择题目


    Day9:面试必考题目


    请添加图片描述

    题目一

    下面有关c++内存分配堆栈说法错误的是( ) D

    A.对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制

    B. 对于栈来讲,生长方向是向下的,也就是向着内存地址减小的方向;对于堆来讲,它的生长方向是向上的,是向着内存地址增加的方向增长

    C.对于堆来讲,频繁的 new/delete 势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低。对于栈来讲,则不会存在这个问题

    D.一般来讲在 32 位系统下,堆内存可以达到4G的空间,但是对于栈来讲,一般都是有一定的空间大小的

    解析:

    A.栈区主要存在局部变量和函数参数,其空间的管理由编译器自动完成,无需手动控制,堆区是自己申请的空间,在不需 要时需要手动释放

    B.栈区先定义的变量放到栈底,地址高,后定义的变量放到栈顶,地址低,因此是向下生长的,堆区则相反

    C.频繁的申请空间和释放空间,容易造成内存碎片,甚至内存泄漏,栈区由于是自动管理,不存在此问题

    D.32位系统下,最大的访问内存空间为4G,所以不可能把所有的内存空间当做堆内存使用,故错误

    题目二

    C++中关于堆和栈的说法,哪个是错误的:( ) C

    A.堆的大小仅受操作系统的限制,栈的大小一般较小

    B.在堆上频繁的调用new/delete容易产生内存碎片,栈没有这个问题

    C.堆和栈都可以静态分配

    D.堆和栈都可以动态分配

    解析:

    A.堆大小受限于操作系统,而栈空间一般有系统直接分配

    B.频繁的申请空间和释放空间,容易造成内存碎片,甚至内存泄漏,栈区由于是自动管理,不存在此问题

    C.堆无法静态分配,只能动态分配

    D.栈可以通过函数_alloca进行动态分配,不过注意,所分配空间不能通过free或delete进行释放

    题目三

    ClassA *pclassa=new ClassA[5];

    delete pclassa;

    c++语言中,类ClassA的构造函数和析构函数的执行次数分别为( ) D

    A.5,1

    B.1,1

    C.5,5

    D.程序可能崩溃

    解析:

    A.申请对象数组,会调用构造函数5次,delete由于没有使用[],此时只会调用一次析构函数,但往往会引发程序崩溃

    B.构造函数会调用5次

    C.析构函数此时只会调用1次,要想完整释放数组空间,需要使用[]

    D.正确

    题目四

    函数参数使用的空间是在()中申请的,malloc或new是在()中申请空间的?()B

    A.堆,栈

    B.栈,堆

    C.栈, 栈

    D.堆,堆

    解析:

    A.参数在栈空间存放,malloc或new申请的空间为堆区

    B.正确

    C.参数在栈空间存放,malloc或new申请的空间为堆区

    D.参数在栈空间存放,malloc或new申请的空间为堆区

    题目五

    下面有关malloc和new,说法错误的是? ( ) C

    A.new 是创建一个对象(先分配空间,再调构造函数初始化), malloc分配的是一块内存

    B.new 初始化对象,调用对象的构造函数,对应的delete调用相应的析构函数,malloc仅仅分配内存,free仅仅回收内存

    C.new和malloc都是保留字,不需要头文件支持

    D.new和malloc都可用于申请动态内存,new是一个操作符,malloc是是一个函数

    解析:

    A.new会申请空间,同时调用构造函数初始化对象,malloc只做一件事就是申请空间

    B.new/delete与malloc/free最大区别就在于是否会调用构造函数与析构函数

    C.需要头文件malloc.h,只是平时这个头文件已经被其他头文件所包含了,用的时候很少单独引入,故错误

    D.new是操作符,malloc是函数

    题目六

    设已经有A,B,C,D4个类的定义,程序中A,B,C,D析构函数调用顺序为? ( ) B

    C c;

    void main()

    {

    A*pa=new A();

    B b;

    static D d;

    delete pa;

    }

    A.A B C D

    B.A B D C

    C.A C D B

    D.A C B D

    分析:首先手动释放pa, 所以会先调用A的析构函数,其次C B D的构造顺序为 C D B,因为先构造全局对象,在构造局部静态对象,最后才构造普通对象,然而析构对象的顺序是完全按照构造的相反顺序进行的,所以答案为 B

    题目七

    使用 char* p = new char[100]申请一段内存,然后使用delete p释放,有什么问题?( ) B

    A.会有内存泄露

    B.不会有内存泄露,但不建议用

    C.编译就会报错,必须使用delete []p

    D.编译没问题,运行会直接崩溃

    解析:

    A.对于内置类型,此时delete就相当于free,因此不会造成内存泄漏

    B.正确

    C.编译不会报错,建议针对数组释放使用delete[],如果是自定义类型,不使用方括号就会运行时错误

    D.对于内置类型,程序不会崩溃,但不建议这样使用

    题目八

    以下代码中,A 的构造函数和析构函数分别执行了几次: ( ) B

    A*pa=new A[10];

    delete []pa;

    A.1、1

    B.10、10

    C.1、10

    D.10、1

    解析:

    A.申请数组空间,构造函数调用的次数就是数组的大小

    B.正确

    C.申请数组空间,构造函数调用的次数就是数组的大小

    D.如果释放数组空间,delete使用了[],则会对应的调用数组大小次数的析构函数

    题目九

    变量所在哪个内存区域以及变量所占空间大小是多少?

    int globalVar = 1;

    static int staticGlobalVar = 1;

    void Test()

    {

    static int staticVar = 1;

    int localVar = 1;

    int num1[10] = {1, 2, 3, 4};

    char char2[] = “abcd”;

    char* pChar3 = “abcd”;

    int* ptr1 = (int*)malloc(sizeof (int)*4);

    int* ptr2 = (int*)calloc(4, sizeof(int));

    int* ptr3 = (int*)realloc(ptr2, sizeof(int)*4);

    free (ptr1);

    free (ptr3);

    }

    选择题:

    选项: A.栈 B.堆 C.数据段(静态区) D.代码段(常量区)

    globalVar在哪里?C staticGlobalVar在哪里?C

    staticVar在哪里?C localVar在哪里?_A

    num1 在哪里?A_

    char2在哪里?A *char2在哪里?_A

    pChar3在哪里?A *pChar3在哪里?D

    ptr1在哪里?A *ptr1在哪里?B

    填空题:

    sizeof(num1) = 40;

    sizeof(char2) = 5; strlen(char2) = 4;

    sizeof(pChar3) = 4; strlen(pChar3) = 4;

    *char2在哪里?A char2在哪里?_A

    *pChar3在哪里?A pChar3在哪里?D

    *ptr1在哪里?A ptr1在哪里?B

    填空题:

    sizeof(num1) = 40;

    sizeof(char2) = 5; strlen(char2) = 4;

    sizeof(pChar3) = 4; strlen(pChar3) = 4;

    sizeof(ptr1) = 4;

  • 相关阅读:
    h5禁止滚动穿透(页面)
    模拟实现memcpy memmove,字符类库函数的介绍,strerror,strtok的使用讲解。
    使用tc命令模拟linux网络延迟环境
    升级Win11后Office无法验证此产品的许可证怎么办?
    词对齐任务:端到端模型
    vue 大文件断点续传、并发控制、请求重试
    MongoDB之客户端工具与核心概念及基本类型篇
    0049__Linux下文件关联的实现原理
    PRCV 2023 - Day2
    提升设备可靠性:人工智能(AI)在设备维护中的应用
  • 原文地址:https://blog.csdn.net/qq_29678157/article/details/126382079