C++ 中判断非空的错误指针
来源:互联网 发布:春秋战国士阶层 知乎 编辑:程序博客网 时间:2024/05/01 13:20
最近在写网络上的东西,程序经过长时间的运行,会出现崩溃的问题,经过DUMP文件的查看,发现在recv的地方接收返回值的时候,数据的长度异常的大差不多16亿多字节.而查看分配后的char指针显示为错误的指针,这可能是接收数据不对应产生的问题解决思路如下:
1.对返回值长度进行判断,如果超过项目内最大的返回值就直接return(比如我项目内的最大返回值为5000,哪么我设定的值为10000);
2.对char指针进行判断,由于这里返回的数据是有的,只是解析不出来而已,这里就是一个非空的错误指针,所以进行二次验证,使用IsBadWritePtr这个API如下实例:
BOOL WINAPI IsBadWritePtr(
_In_ LPVOID LP,
_In_ UINT_PTR UCB
);
参数
LP [中]
一个指向内存块的第一个字节。
UCB [中]
该内存块的大小,以字节为单位。如果这个参数是零,则返回值是零。
返回值
如果调用进程具有写访问指定的内存范围内的所有字节,则返回值为零。
如果调用进程不具有写访问指定的内存范围内的所有字节,则返回值为非零值。
1.对返回值长度进行判断,如果超过项目内最大的返回值就直接return(比如我项目内的最大返回值为5000,哪么我设定的值为10000);
2.对char指针进行判断,由于这里返回的数据是有的,只是解析不出来而已,这里就是一个非空的错误指针,所以进行二次验证,使用IsBadWritePtr这个API如下实例:
BOOL WINAPI IsBadWritePtr(
_In_ LPVOID LP,
_In_ UINT_PTR UCB
);
参数
LP [中]
一个指向内存块的第一个字节。
UCB [中]
该内存块的大小,以字节为单位。如果这个参数是零,则返回值是零。
返回值
如果调用进程具有写访问指定的内存范围内的所有字节,则返回值为零。
如果调用进程不具有写访问指定的内存范围内的所有字节,则返回值为非零值。
如果应用程序在调试器下运行,进程不具有写访问权限在指定的内存范围内的所有字节,该函数会导致第一次机会STATUS_ACCESS_VIOLATION例外。调试器可以被配置为打破这个条件。恢复执行的过程在调试器中后,该功能将继续像往常一样,并返回一个非零值这个行为是经过设计,并作为辅助调试。
//----------------------------------------------------------------------------//这是一个测试1char *pbuf1 = new char[10];pbuf1 = (char *)0x0; //经过这里赋值 pbuf现在是一个错误的指针bool br1 = IsBadWritePtr(pbuf1,10); //返回的值是trueif(!br1){memcpy(pbuf1,"111111111",10);cout << pbuf1 << endl;printf("Display1:%s \n",pbuf1);}//这是一个测试2char *pbuf2 = new char[10];bool br2 = IsBadWritePtr(pbuf2,10); //返回的值是trueif(!br2){memcpy(pbuf2,"222222222",10);printf("Display2:%s \n",pbuf2);}//输出结果//Display2:222222222//----------------------------------------------------------------------------MFC里也可以使用AfxIsValidAddress方法判断。// Allocate a 5 character array, which should have a valid memory address.char *array = new char[5];// Create a null pointer, which should be an invalid memory address.char *null = (char *)0x0;ASSERT(AfxIsValidAddress(array, 5));ASSERT(!AfxIsValidAddress(null, 5));
0 0
- C++ 中判断非空的错误指针
- <c:if></c:if>判断非空
- groovy中对象的比较以及非空判断
- js中el表达式的使用和非空判断
- C/C++ 下如何判断空指针
- Websphere中引起的空指针错误的解决办法小结
- 不对文件指针进行非空判断是很危险的(今天就碰到了)
- Android中 Service的onStartCommand方法空指针错误
- String的非空判断、Integer的非空判断、list的大小判断,对象的非空判断
- java中判断空字符串时避免出现空指针的方法
- 关于java中判断为空出现空指针异常的问题
- 关于java的非空判断
- PHP非空判断的必要性
- Mybatis int 判断非空的坑
- Mybatis int 判断非空的坑
- 循环list的非空判断
- 47-字符串的非空判断
- mybatis对非空的判断Bug
- nginx+terracotta+freemarker集群
- silverlight 中 支持datatable写法
- WebSphere部署应用后,访问页面处于loading状态。
- linux下vi命令
- 字体闪动的特效!
- C++ 中判断非空的错误指针
- OCP-1Z0-053-200题-50题-628
- Ubuntu 字体安装
- wifi 简单介绍
- 一些模板的写法
- Entity Framework的简单使用
- [存储] Cobar使用文档(可用作MySQL大型集群解决方案)
- LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- vim粘贴代码格式变乱