深信服电话面试记录

C语言内存分配的方式

malloc

malloc在哪申请内存分配

动态存储区

malloc如何释放分配的内存

通过free()函数

如果防止内存泄漏(内存泄漏的场景)

  • 内存分配未成功,就开始使用
    解决办法是在使用内存之前检查指针是否为空。
    如果*p是函数的一个参数,那么在函数的入口处用assert(p!=NULL),(头文件是assert.h)进行检查
    如果是用malloc或new来申请内存,应该用if(p!==NULL)来进行防错处理
  • 内存分配成功,但是尚未初始化就开始使用
    两个原因:一是没有初始化的概念,二是误认为内存的缺省初值全为0,导致引用初值错误(数组)
  • 内存分配成功并且已经初始化,但内存越界
  • 忘记释放内存,造成内存泄漏
    含有这种错误的函数每被调用一次就会丢失一块内存

频繁释放内存会导致什么

可能会导致内存申请不成功,或者释放不成功,进而造成内存泄漏

const使用场景

可以用来修饰变量,数组,结构体
作用是以const关键字声明的对象,其值不能通过赋值或递增,递减来修改

数组和链表的区别

数组:查询简单,增删困难,查询时时间复杂度是O(1),需要提前确认大小
链表:增删简单,查询困难,查询时时间复杂度是O(n),不需要提前确认大小

栈和队列的区别

栈:先进后出,插入和删除元素时从栈顶开始
队列:先进先出,插入时从尾部插入,删除时从头部开始

如何用两个栈组成一个链表

参考:https://blog.csdn.net/dangzhangjing97/article/details/81477192

关于C语言内存对齐的问题

C语言内存地址对齐

都知道哪些抓包工具

参考: https://blog.csdn.net/gufenchen/article/details/90895856

如何查看Linux内存

free -m

你可能感兴趣的:(面试)