空指针操作在linux和windows下的区别
来源:互联网 发布:js数据类型转换 编辑:程序博客网 时间:2024/06/05 11:56
序
空指针的非法访问:
* 在windows下可以用try-catch捕获住.
* 在linux下, 无法用try-catch捕获住, 直接段错误, 程序崩溃了.
为了安全操作指针, 在使用指针前, 必须对指针进行非空检查。
实验
for (int i = 0; i < 10; i++) { printf("testcase_try_catch : i = %d\n", i); testcase_try_catch(argc, argv); }
int testcase_try_catch(int argc, char* argv[]){ char* pBuf = new char[0x100]; try { if (NULL != pBuf) { memset(pBuf, 0, 0x100); strcpy(pBuf, "xello"); if (0 == (rand() % 2)) { delete []pBuf; pBuf = NULL; } // 如果不在使用指针前, 检查指针是否为空 // 当指针为空时进行赋值的后果 // windows : 会被try-catch捕获住 // linux : try-catch无法捕获, 直接段错误, 程序崩掉了 // 总结 : 为了安全的使用指针,在使用指针前,都要进行指针的有效性检查 // 不能依赖try-catch来预防指针为空的非法访问 // try-catch捕获的是异常(设计出来的改变流程的手段) // try-catch不可用来捕获非法访问(程序的错误) // 为了程序的兼容性, 空指针的检查时必须的 // if (NULL != pBuf) { *pBuf = 'h'; printf("%s\n", pBuf); // } } } catch (exception e) { printf("catch (exception e) : %s\n", e.what()); } catch (...) { // catch... 在linux下也捕获不了空指针非法访问 printf("catch (...)\n"); } if (NULL != pBuf) { delete []pBuf; } return 0;}
run resulttestcase_try_catch : i = 0hellotestcase_try_catch : i = 1./Makefile: line 42: 4081 Segmentation fault ./testcaseroot@debian:/home/dev/testdir#
0 0
- 空指针操作在linux和windows下的区别
- socket在windows下和linux下的区别
- socket在windows下和linux下的区别
- socket在windows下和linux下的区别
- socket在windows下和linux下的区别
- socket在windows下和linux下的区别
- socket在windows下和linux下的区别
- socket在windows下和linux下的区别
- socket在windows下和linux下的区别
- 回车和换行在windows和linux下的区别
- 在linux和windows下做c语言的区别
- 枚举类型在Linux和Windows下编程的区别
- socket在windows和linux下的区别
- 换行符在Linux和Windows下的区别
- socket编程在windows和linux下的区别
- socket编程在windows和linux下的区别
- 换行符在Linux和Windows下的区别
- oracle在WINDOWS和UNIX(LINUX)下的主要区别
- VMware vMotion 配置要求
- bzoj1564: [NOI2009]二叉查找树
- [Leetcode] 140. Word Break II 解题报告
- Go解析命令行传入参数
- SimpleDateFormat的线程安全问题与解决方案
- 空指针操作在linux和windows下的区别
- MATLAB 读写excel数据
- C# 发布windows 服务
- 登录工程二:现代 Web 应用的典型身份验证需求
- elasticsearch笔记_索引文档时的集群内部操作(二)
- 树与二叉树的转换、树的遍历
- SQLiteDatabase填充spinner(populating spinner from SQLiteDatabase)
- jsp中自定义标签的学习
- 【C#】wpf中的xmlns命名空间为什么是一个网址,代表了什么意思