C语言常见面试题

本文详细介绍了C语言面试中常见的问题,包括堆栈内存的区别、内存泄漏及其定位、内存碎片的避免策略。此外,还探讨了字符串的定义、存在方式以及常用的字符串操作函数,如strlen、strcpy等,并讲解了输入输出缓冲区的工作原理和常见问题的解决方法。
摘要由CSDN通过智能技术生成

常见的面试题:

1、堆内存与栈内存的区别。
定义 大小 使用 安全 优缺点

2、堆内存越界的后果
超过33页产生段错误
破坏malloc的维护信息,再次使用malloc/free会出错
脏数据

3、什么是内存泄漏,如何定位内存泄漏
由于粗心大意、业务逻辑出错导致使用完毕的内存没有释放,当再次需要时只能重新申请,又没释放,长期日积月累能使用的内存就越来越少,系统越来越慢甚至崩溃,这种情况就要内存泄漏。
1、Windows查看任务管理器,Linux使用ps -aux,或者通过GDB查看内存使用情况
2、使用mtrace代码工具,分析代码
3、封装malloc、free,记录申请、释放内存的过程

4、什么是内存碎片,如果避免内存碎片
已经释放但是也无法再次使用的就叫内存碎片,它是由于申请、释放的时间、大小不协调导致的
1、尽量使用栈内存
2、不要频繁申请、释放内存
3、尽量申请大内存,自己管理

字符串:
由字符组成的串形结构,结束标志是’\0’
存在方式:
字符串字面值:
“由双引号包含的若干个字符”,储存在代码段,只读,修改会产生段错误,地址,末尾隐藏了一个’\0’
const char* strp = “hello”;
sizeof(“hello”) 6 字符个数+1

字符数组:char str[] = {‘a’,‘b’,‘c’};
储存在栈内存,可以修改,需要手动添加\0
注意:字符数组不要设置数组的长度

一般使用字符串字面值来初始化

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值