2019深信服一面(凉经)

本文深入探讨了导致程序崩溃的各种原因,包括未初始化变量、函数栈溢出、数组越界等,并详细解析了标准I/O与系统I/O的区别及应用场景。同时,介绍了不当的文件操作如使用fopen()后未fclose()可能导致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、如何判断一个进程崩溃了?

2、什么情况下会引起程序崩溃?

1、读取未赋值的变量
没有给变量初始化和赋值,导致该变量的值为脏值。
2、函数栈溢出
函数栈溢出一般是由两种情况引起的:
1、定义了一个体积太大的局部变量或者参数,参数和局部变量一般都是存储在栈中的,但是栈所占的内存空间很小,在32位下只占有8M的空间,因此如果没有使用malloc和new来在堆上创建内存空间的话,栈溢出就会很容易发生。
2、函数的嵌套调用的层次太深了,就像无穷递归和无穷的循环调用一样。
3、数组访问越界

4、指针的目标对象不可用
指针所指向的对象要正常使用,它就必须是一个合法的,有效的,可以访问的对象,像当指针为空指针或者是野指针时,你再使用它程序就会立马崩溃。而出现空指针或者野指针一般都是下面这几种操作导致的:
1、指针未赋值
2、free/delete释放了该对象
3、不恰当的指针强制类型转换

3、内存溢出会造成什么问题?

4、标准I/O和系统I/O的区别?什么情况下使用标准I/O,什么情况下使用系统I/O?

详见以下参考:
标准IO跟系统IO

5、使用fopen()打开文件,没有使用fclose()打开文件会发生什么?fopen()返回的是什么类型的指针?

如果文件被打开再被删除,在文件不被关闭的情况下,原文件占用的空间不会被释放,这样可能会出现磁盘空间不足的问题。
FILE* fopen(const char * path,const char * mode);
// path: 文件名
// mode:打开模式
返回一个FILE类型的指针,FILE结构体定义如下:

typedef struct  {
        short           level;          /* fill/empty level of buffer */
        unsigned        flags;          /* File status flags    */
        char            fd;             /* File descriptor      */
        unsigned char   hold;           /* Ungetc char if no buffer */
        short           bsize;          /* Buffer size          */
        unsigned char   *buffer;        /* Data transfer buffer */
        unsigned char   *curp;          /* Current active pointer */
        unsigned        istemp;         /* Temporary file indicator */
        short           token;          /* Used for validity checking */
} FILE;                                 /* This is the FILE object */

6、统计一篇文章所有单词出现的次数,找出出现次数最多的10个单词。

思路: 分治法 + hash + 小根堆

(1) 定义一个关联容器hash_map<string,int>,用于统计英文文章中每个单词出现的次数;定义一个vector<hash_map<string,int>::iterator>,用于存储小根堆K;

(2) 将英文文章中的前K个单词先填满topK堆;

(3) 调整topK堆为小根堆结构;

(4) 通过遍历将后面的单次出现的次数与堆顶单词出现的次数(此时堆顶单词出现的次数最小)比较,大于堆顶元素就入堆,并下调堆结构。

(5) 遍历结束,则小根堆中的单词即英文文章中频次出现最高的10个单词。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值