当前位置: 首页 > news >正文

动态内存管理面试题

动态内存管理面试题

文章目录

  • 动态内存管理面试题
  • 一、第一题
    • 此代码存在的问题
      • 运行结果
      • 分析原因
      • 修改
  • 二、第二题
    • 此代码存在的问题
      • 运行结果
      • 分析原因
      • 修改


一、第一题

代码如下(示例):

#include<stdio.h>
#include<string.h>
#include<stdlib.h>void GetMemory(char* p)
{p = (char*)malloc(100);//申请100个字节的临时空间,将起始地址放入p
}
void Test(void)
{char* str = NULL;GetMemory(str);strcpy(str, "hello world");printf(str);
}int main()
{Test();return 0;
}

此代码存在的问题

运行结果

在这里插入图片描述

分析原因

在这里插入图片描述

修改

#include<stdio.h>
#include<string.h>
#include<stdlib.h>void GetMemory(char** p)
{*p = (char*)malloc(100);//申请100个字节的临时空间,将起始地址放入p
}
void Test(void)
{char* str = NULL;GetMemory(&str);strcpy(str, "hello world");printf(str);//释放free(str);str = NULL;
}int main()
{Test();return 0;
}

主要修改的地方就是将str的地址传入函数当中去修改str本身

二、第二题

代码如下(示例):

#include<stdio.h>
#include<string.h>
#include<stdlib.h>char* GetMemory(void)
{char p[] = "hello world";return p;
}
void Test(void)
{char* str = NULL;str = GetMemory();printf(str);
}int main()
{Test();return 0;
}

此代码存在的问题

运行结果

在这里插入图片描述

分析原因

在这里插入图片描述

修改

#include<stdio.h>
#include<string.h>
#include<stdlib.h>char* GetMemory(void)
{char* p = "hello world";return p;
}
void Test(void)
{char* str = NULL;str = GetMemory();printf(str);
}int main()
{Test();return 0;
}

char* p = “hello world”; 将常量字符串的地址传给str,即使p被销毁了,那么常量字符串还在,p只是一个首地址的存储,不会影响最终的打印

http://www.lryc.cn/news/97657.html

相关文章:

  • 树莓派外设开发编程
  • Java从入门到精通(一)
  • Electron从构建到打包程exe应用
  • 3分钟学会设计模式 -- 单例模式
  • 《面试1v1》Kafka与传统消息系统区别
  • 【算法第十三天7.27】平衡二叉树,二叉树所有路径,左叶子之和
  • arm架构cloudstack的agent报错No more available PCI slots如何解决
  • day43-Feedback Ui Design(反馈ui设计)
  • TypeScript基础篇 - TS日常类型 上篇
  • 量化交易——python数据分析及可视化
  • 微服务网关
  • 【打卡】Datawhale暑期实训ML赛事
  • 【python脚本】python实现:目标检测裁剪图片样本,根据类标签文件进行裁剪保存
  • Mac 终端美化显示
  • 信息安全:密码学基本理论.
  • 【linux升级ssh】 利用rpmbuild工具对ssh打包为rpm包进场安装升级
  • UCloud上线可商用LLaMA2镜像,助力AGI应用发展
  • Linux推出Debian 12.1,并进行多方面系统修复
  • Spring 事务的使用、隔离级别、@Transactional的使用
  • Top命令
  • (三)RabbitMQ七种模式介绍与代码演示
  • ElasticSearch Java API 操作
  • 【Qt】QML-01:使用QtCreator10创建QML工程,并讲解第一个程序:Hello World
  • Docker的安装与部署
  • 【数据结构】实验四:循环链表
  • 【FPGA/D7】
  • Vue的下载以及MVVM分析
  • ElasticSearch学习--自动补全
  • 【C++】多态,虚函数表相关问题解决
  • 探索大型语言模型的开源人工智能基础设施:北京开源AI Meetup回顾