小老弟研发之路面筋大汇总——深信服面经汇总

5 篇文章 0 订阅

目录

野指针

strcpy的实现,和strncpy的区别

linux下有哪些信号

谈谈IO复用


  • 野指针

野指针概念:就是指向不可用内存区域的指针。如果对野指针进行操作,将会使程序发生不可预知的错误,甚至可能直接引起崩溃。

易错点:野指针不是NULL指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是野指针是很危险的,也具有很强的掩蔽性,if语句对它不起作用。

三个常见出现原因:

1、指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针。在Debug模式下,VC++编译器会把未初始化的栈内存上的指针全部填成 0xcccccccc ,当字符串看就是 “烫烫烫烫……”;会把未初始化的堆内存上的指针全部填成 0xcdcdcdcd,当字符串看就是 “屯屯屯屯……”。把未初始化的指针自动初始化为0xcccccccc或0xcdcdcdcd,而不是就让取随机值,那是为了方便我们调试程序,使我们能够一眼就能确定我们使用了未初始化的野指针。在Release模式下,编译器则会将指针赋随机值,它会乱指一气。所以,指针变量在创建时应当被初始化,要么将其设置为NULL,要么让它指向合法的内存。

 2、指针指向的内存被释放了,而指针本身没有置NULL。对于堆内存操作,我们分配了一些空间(使用malloc函数、calloc函数或new操作符),使用完后释放(使用free函数或delete操作符)。指针指向的内存被释放了,而指针本身没有置NULL。通常会用语句if (p != NULL)进行防错处理。很遗憾,此时if语句起不到防错作用。因为即便p不是NULL指针,它也不指向合法的内存块。所以在指针指向的内存被释放后,应该将指针置为NULL。

3 、指针超过了变量的作用范围。即在变量的作用范围之外使用了指向变量地址的指针。这一般发生在将调用函数中的局部变量的地址传出来引起的。这点容易被忽略,虽然代码是很可能可以执行无误,然而却是极其危险的。局部变量的作用范围虽然已经结束,内存已经被释放,然而地址值仍是可用的,不过随时都可能被内存管理分配给其他变量。


  • strcpy的实现,和strncpy的区别

代码实现:

#include "assert.h"
char* strcpy_s(char* a,const char* b) {
	assert(a != NULL && b != NULL);
	char* address = a;
	int i;
	for (i = 0; b[i] != '\0'; i++ ) {
		a[i] = b[i];
	}
	a[i] = '\0';
	return address;
}

为什么返回char* 类型:为了灵活性,链式表达。

和strcnpy的区别:

两个都是string.h头文件中实现拷贝字符串数组功能的函数。两者的区别从字面上就可以理解,前者正常拷贝整个字符串到另一个字符串数组,后者拷贝前n个字符到另一个字符串数组(很好理解)。

//都是参数后者拷贝给前者
char* strcpy(char* dest, const char* src);
char* strncpy(char* dest, const char* src,int nLen);

  • linux下有哪些信号

信号分为:可靠信号(非实时的),不可靠信号(实时的)。

不可靠信号:SIGINT, SIGILL

可靠信号:SIGSYS ,SIGRTMIN

SIGINT:程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程。

SIGILL:执行了非法指令. 通常是因为可执行文件本身出现错误, 或者试图执行数据段. 堆栈溢出时也有可能产生这个信号。


  • 谈谈IO复用

io复用是io模型的五种模型之一(

  1. 阻塞式I/O:所有套接字默认
  2. 非阻塞I/O
  3. I/O复用(select,poll,epoll)
  4. 信号驱动式(SIGIO):内核在描述符就绪时发送SIGIO通知进程
  5. 异步I/O(POSIX的aio_系列函数):

select,poll,epoll的用途和原理。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值