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

C语言习题~day27

1.关于下面代码描述不正确的是:

void GetMemory(char *p)
{p = (char *)malloc(100);
}
void Test(void)
{char *str = NULL;GetMemory(str);strcpy(str, "hello world");printf(str);
}

A.上面代码没问题

B.上面代码存在内存泄露

C.上面代码可能会崩溃,即使GetMemory函数返回,str依然为NULL

D.GetMemory函数无法把malloc开辟的100个字节带回来

BCD已经说明了问题。核心问题就是子函数中的p是临时变量,改变它并不会改变主函数中的str。 

2.以下哪个不是动态内存的错误( )

A.free参数为NULL

B.对非动态内存的free释放

C.对动态内存的多次释放

D.对动态内存的越界访问

 这个题目是课本上的知识点

A选项,是对的,free函数传递NULL指针,什么事情都不发生

B,C,D都是错误的

3.关于下面代码描述正确的是( )

char *GetMemory(void)
{char p[] = "hello world";return p;
}
void Test(void)
{char *str = NULL;str = GetMemory();printf(str);
}

 A.printf函数使用有问题

B.程序正常打印hello world

C.GetMemory函数返回的地址无法正常使用

D.程序存在内存泄露

说明:此题考的是“局部变量的指针不能做返回值,因为函数内的空间在函数返回后就会释放调”这一点。只有C说到点子上了。

A:printf函数的使用也是错误的, 如果要打印printf("%s", str); 这个是str指针是正常的情况下, 是可以的。 如果str是非法的, 那也会导致printf错误的

B选项:打印结果其实是不确定的。

D选项: 比较离谱,程序中并没有动态内存分配,所以不存在内存泄漏。

4.给你一个长度为 n 的整数数组 nums 。请你构建一个长度为 2n 的答案数组 ans ,数组下标 从 0 开始计数 ,对于所有 0 <= i < n 的 i ,满足下述所有要求:

  • ans[i] == nums[i]
  • ans[i + n] == nums[i]

具体而言,ans 由两个 nums 数组 串联 形成。

返回数组 ans 。

/*** Note: The returned array must be malloced, assume caller calls free().*/
int* getConcatenation(int* nums, int numsSize, int* returnSize) {//定义一个长度为nums数组长度两倍的数组ansint* ans = malloc(2*numsSize * sizeof(int));int i = 0;//遍历nums数组,将下标为x的元素分别赋值给ans数组中下标为x和下标为x+m的元素;for(i=0; i<numsSize; i++) {ans[i] = nums[i];ans[i+numsSize] = nums[i];}//更新数组长度并返回数组*returnSize = 2*numsSize;return ans;
}

5.使用malloc函数模拟开辟一个二维数组

使用malloc函数模拟开辟一个3*5的整型二维数组,开辟好后,使用二维数组的下标访问形式,访问空间。 

#include <stdio.h>int main()
{//开辟int** p = (int**)malloc(3 * sizeof(int*));int i = 0;for (i = 0; i < 3; i++){p[i] = (int*)malloc(5 * sizeof(int));}//使用int j = 0;for (i = 0; i < 3; i++){for (j = 0; j < 5; j++){p[i][j] = 5 * i + j;}}for (i = 0; i < 3; i++){for (j = 0; j < 5; j++){printf("%d ", p[i][j]);}printf("\n");}for (i = 0; i < 3; i++){free(p[i]);}free(p);p = NULL;return 0;
}

 

相关文章:

  • LINUX系统编程:信号量
  • 最新扣子(Coze)使用指南更新:如何导入扣子插件,完全免费Coze教程
  • JavaScript函数进阶学习
  • 0基础认识C语言(理论知识)
  • 算法课程笔记——计数原理
  • 直流电机工作原理与控制电路解析
  • 汇编原理(三)编程
  • Android bw_costly_<iface>链
  • TypeScript算法每日一题:两数之和(1)
  • 计算机网络介绍
  • 09Linux GDB学习笔记
  • ctfshow jwt web入门
  • 【前端】vue+element项目中select下拉框label想要显示多个值多个字段
  • 自然语言处理(NLP)—— 神经网络语言处理
  • NPN与PNP的基础知识介绍
  • @angular/forms 源码解析之双向绑定
  • 【附node操作实例】redis简明入门系列—字符串类型
  • Android交互
  • CSS中外联样式表代表的含义
  • express + mock 让前后台并行开发
  • iOS编译提示和导航提示
  • Kibana配置logstash,报表一体化
  • MySQL几个简单SQL的优化
  • mysql外键的使用
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • PHP的类修饰符与访问修饰符
  • Python socket服务器端、客户端传送信息
  • Python进阶细节
  • python学习笔记-类对象的信息
  • Rancher-k8s加速安装文档
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • 记一次用 NodeJs 实现模拟登录的思路
  • 如何学习JavaEE,项目又该如何做?
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 我感觉这是史上最牛的防sql注入方法类
  • 详解移动APP与web APP的区别
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 原生js练习题---第五课
  • Android开发者必备:推荐一款助力开发的开源APP
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • # 达梦数据库知识点
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (1)常见O(n^2)排序算法解析
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (笔试题)合法字符串
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (转)mysql使用Navicat 导出和导入数据库