最近在写网络上的东西,程序经过长时间的运行,会出现崩溃的问题,经过DUMP文件的查看,发现在recv的地方接收返回值的时候,数据的长度异常的大差不多16亿多字节.而查看分配后的char指针显示为错误的指针,这可能是接收数据不对应产生的问题解决思路如下:
1.对返回值长度进行判断,如果超过项目内最大的返回值就直接return(比如我项目内的最大返回值为5000,哪么我设定的值为10000);
2.对char指针进行判断,由于这里返回的数据是有的,只是解析不出来而已,这里就是一个非空的错误指针,所以进行二次验证,使用IsBadWritePtr这个API如下实例:
BOOL WINAPI IsBadWritePtr(
_In_ LPVOID LP,
_In_ UINT_PTR UCB
);
参数
LP [中]
一个指向内存块的第一个字节。
UCB [中]
该内存块的大小,以字节为单位。如果这个参数是零,则返回值是零。
返回值
如果调用进程具有写访问指定的内存范围内的所有字节,则返回值为零。
如果调用进程不具有写访问指定的内存范围内的所有字节,则返回值为非零值。
如果应用程序在调试器下运行,进程不具有写访问权限在指定的内存范围内的所有字节,该函数会导致第一次机会STATUS_ACCESS_VIOLATION例外。调试器可以被配置为打破这个条件??。恢复执行的过程在调试器中后,该功能将继续像往常一样,并返回一个非零值这个行为是经过设计,并作为辅助调试。
//----------------------------------------------------------------------------
//这是一个测试1
char *pbuf1 = new char[10];
pbuf1 = (char *)0x0;   //经过这里赋值 pbuf现在是一个错误的指针
bool br1 = IsBadWritePtr(pbuf1,10);  //返回的值是true
if(!br1)
{
memcpy(pbuf1,"111111111",10);
cout << pbuf1 << endl;
printf("Display1:%s \n",pbuf1);
}
//这是一个测试2
char *pbuf2 = new char[10];
bool br2 = IsBadWritePtr(pbuf2,10);  //返回的值是true
if(!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));

C++ 中判断非空的错误指针相关推荐

  1. oracle 判断非空字段

    sql中判断非空不能用等号,因为null在sql中被看作特殊符号,必须使用关键字 is和not select * from A where info is not null 非空: select id ...

  2. Mybatis if test 中int integer判断非空的坑

    Mybatis 中,alarmType 是int类型.如果alarmType 为0的话,条件判断返回结果为false,其它值的话,返回true. 1 <if test="alarmTy ...

  3. ASP.NET中 RequiredFieldValidator(非空验证)的使用

    ylbtech-ASP.NET-Control-Validator: RequiredFieldValidator(非空验证)的使用 ASP.NET中 RequiredFieldValidator(非 ...

  4. SQL判断不等于的5种方法和判断非空的11种方法

    做牛客练习题的时候遇到的 链接:SQL9 查找除复旦大学的用户信息 描述 题目:现在运营想要查看除复旦大学以外的所有用户明细,请你取出相应数据 示例:user_profile id device_id ...

  5. javascript判断非空

    1 /* 2 *判断非空 3 * 4 */ 5 function isEmpty(val){ 6 if(val == null)return true; 7 if(val == undefined | ...

  6. Mybatis if test 中int判断非空的坑

    Mybatis 中,alarmType 是int类型.如果alarmType 为0的话,条件判断返回结果为false,其它值的话,返回true. 假如你现在还在为自己的技术担忧,假如你现在想提升自己的 ...

  7. java 多态判断非空_收藏Java 面试题全梳理

    脚本之家 你与百万开发者在一起 来源 | Java建设者(ID:javajianshe) 作者 |cxuan 如若转载请联系原公众号 Java 基础篇 Java 有哪些特点 并发性的:你可以在其中执行 ...

  8. java 多态判断非空_Java核心技术(四):继承

    本章目录: 一.类.超类和子类 1.多态 2.动态绑定 3.阻止继承:final类和方法 4.抽象类 5.访问修饰符总结 二.Object类:所有类的父类 1.equals方法 2.hashcode方 ...

  9. 关于VC中删除非空文件夹

    要删除文件夹,我们可以用到SHFILEOPSTRUCT这种结构体,利用该结构体可以删除空文件夹和非空文件夹. typedef struct _SHFILEOPSTRUCT{      HWND hwn ...

最新文章

  1. ​易生信-宏基因组积微学术论坛:基于大数据整合准确预测土壤的枯萎病发生...
  2. Mongodb~Linux环境下的部署~服务的部署与自动化
  3. PHP的serialize与json_encode
  4. dp打开思路2:POJ2533 HDU1114 HDU1260 HDU1160(水题不水)
  5. 2003系统中证书服务
  6. 带aidl文件的应用程序在android平台源码中的编译
  7. HackerRank难题记录
  8. 单片机c语言直接寻址 间接寻址,pic单片机教程之数据存储器的直接间接寻址方式...
  9. php 代码分析软件,分析和解析PHP代码的7大工具
  10. 图书馆图书管理系统python_使用python的简易图书馆管理系统
  11. 阿里云CDN是什么?阿里云CDN配置与购买优惠教程
  12. python 去除水印_cv2 去除图片水印
  13. 五步帮你实现用户画像的数据加工
  14. 使用栈进行括号匹配的判断
  15. 华为手机如何给应用加锁_华为手机如何给微信开启应用锁功能
  16. JAVA的学习心路历程之JDK基础入门(上)
  17. 关于软件界面设计、控件颜色搭配、一些实用建议(偷懒技巧)总结——针对C# WinForm/WPF技术
  18. 优酷土豆否认将被今日头条收购:完全是子虚乌有的胡扯
  19. SlackwareLinux的安装之您满意DOS的表现?(转)
  20. 猫盘群晖远程访问之Frp

热门文章

  1. (一)神经网络入门之线性回归
  2. php检测函数是否存在函数 function_exists
  3. 51CTO推荐博客、博客之星名单【2014年】
  4. MindMaster Pro中文版
  5. PSP 2.0降级至1.5详细教程(转)
  6. 【模板/经典题型】FWT
  7. 1.编译cartographer ROS
  8. PHP-Socket服务端客户端发送接收通信实例详解
  9. 数据库死锁的解决办法
  10. Sublime Text 3 快捷键精华版